คำถามติดแท็ก 2d

2D หมายถึงพื้นที่สองมิติที่มีการแสดงพิกัดด้วยค่า X และ Y

2
ฉันจะทำอัลฟ่าโปร่งใสอย่างถูกต้องใน XNA 4.0 ได้อย่างไร
โอเคฉันได้อ่านบทความบทช่วยสอนและคำถามเกี่ยวกับเรื่องนี้แล้ว ส่วนใหญ่ชี้ไปที่เทคนิคเดียวกันซึ่งไม่ได้แก้ปัญหาของฉัน ฉันต้องการความสามารถในการสร้างสไปรต์แบบกึ่งโปร่งใส (ของ texture2D จริงๆ) และให้สไปรต์ซ้อนทับอีก ฉันสามารถทำได้โดยใช้ตัวอย่างโค้ดที่ฉันพบ แต่ฉันไม่พอใจกับผลลัพธ์และฉันรู้ว่ามีวิธีในการทำเช่นนี้ ในการเขียนโปรแกรมมือถือ (BREW) เราทำมันเป็นโรงเรียนเก่าและตรวจสอบแต่ละพิกเซลเพื่อความโปร่งใสก่อนการเรนเดอร์ ในกรณีนี้ดูเหมือนว่าจะทำให้เทพดาด้านล่างมันผสมกับอัลฟาด้านบน นี่อาจเป็นสิ่งประดิษฐ์ของวิธีที่ฉันแสดงพื้นผิว แต่อย่างที่ฉันพูดไปก่อนหน้านี้ทุกตัวอย่างชี้ไปที่เทคนิคนี้ ก่อนที่ฉันจะไปเพิ่มเติมฉันจะไปข้างหน้าและวางรหัสตัวอย่างของฉัน public void Draw(SpriteBatch batch, Camera camera, float alpha) { int tileMapWidth = Width; int tileMapHeight = Height; batch.Begin(SpriteSortMode.Texture, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, camera.TransformMatrix); for (int x = 0; x < tileMapWidth; x++) { …
14 xna  2d  c#  rendering  transparency 

2
การเคลื่อนไหวนั้นขึ้นอยู่กับอัตราเฟรมแม้จะใช้ Time.deltaTime
ฉันมีรหัสต่อไปนี้เพื่อคำนวณการแปลที่จำเป็นในการย้ายวัตถุเกมใน Unity ซึ่งเรียกว่าLateUpdateมา จากสิ่งที่ฉันเข้าใจการใช้งานของฉันTime.deltaTimeควรจะทำให้เป็นอิสระแปลสุดท้ายอัตราเฟรม (โปรดทราบCollisionDetection.Move()เป็นเพียงการแสดง raycasts) public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If …

1
วิธีที่มีประสิทธิภาพในการคำนวณ "กรวยการมองเห็น" บนแผนที่ย่อยแบบ 2D หรือไม่
ฉันกำลังพยายามคำนวณว่าหน่วยใดหน่วยหนึ่งสามารถ "เห็น" ถ้าหันหน้าไปทางทิศทางหนึ่งบนแผนที่ย่อย (ภายในช่วงและมุมที่หันหน้าไป) วิธีที่ง่ายที่สุดคือการดึงกระเบื้องจำนวนหนึ่งออกไปด้านนอกและ raycast ไปยังแต่ละแผ่น อย่างไรก็ตามฉันหวังว่าจะมีประสิทธิภาพมากกว่านี้เล็กน้อย รูปภาพบอกหนึ่งพันคำ: จุดสีแดงคือหน่วย (ผู้ที่หันขึ้นด้านบน) เป้าหมายของฉันคือการคำนวณกระเบื้องสีเหลือง บล็อกสีเขียวเป็นผนัง (ผนังอยู่ระหว่างแผ่นกระเบื้องและง่ายต่อการตรวจสอบว่าคุณสามารถผ่านระหว่างสองแผ่นได้หรือไม่) เส้นสีน้ำเงินแสดงถึงวิธีการ "raycasting" ที่ฉันพูดถึง แต่ฉันไม่ต้องการทำเช่นนี้ แก้ไข: หน่วยสามารถหันหน้าไปทางเหนือ / ใต้ / ตะวันออก / ตะวันตก (0, 90, 180 หรือ 270 องศา) และ FoV อยู่ที่ 90 องศาเสมอ ควรทำให้การคำนวณง่ายขึ้น ฉันคิดว่ามีอัลกอริทึมแบบเรียกซ้ำ - ish / stack-based / queue-based แต่ฉันไม่สามารถเข้าใจได้ ขอบคุณ!
13 2d  algorithm  tilemap 

4
วิธีการใช้พื้นที่ขอบนุ่มกับอนุภาค
เกมของฉันสร้างขึ้นโดยใช้ Phaser แต่คำถามตัวเองนั้นไม่เชื่อเรื่องพระเจ้า ในเกมของฉันฉันมีสภาพแวดล้อมหลายอย่างโดยทั่วไปพื้นที่รูปหลายเหลี่ยมที่ตัวละครผู้เล่นสามารถย้ายเข้ามาและได้รับผลกระทบจาก ตัวอย่างเช่นน้ำแข็งไฟพิษ ฯลฯ องค์ประกอบกราฟิกของพื้นที่เหล่านี้คือพื้นที่รูปหลายเหลี่ยมที่เติมสีนั้นและอนุภาคของประเภทที่เหมาะสม (ในตัวอย่างเศษน้ำแข็ง) นี่คือวิธีที่ฉันใช้งานในปัจจุบัน - ด้วยหน้ากากรูปหลายเหลี่ยมที่ครอบคลุมกระเบื้องที่มีรูปแบบอนุภาค: ขอบแข็งดูไม่ดี ฉันต้องการปรับปรุงโดยการทำสองสิ่ง: 1. ทำให้พื้นที่เติมรูปหลายเหลี่ยมมีขอบที่อ่อนนุ่มและผสมผสานเป็นพื้นหลัง 2. ให้เศษบางส่วนออกจากพื้นที่รูปหลายเหลี่ยมเพื่อไม่ให้ถูกตัดตรงกลางและพื้นที่ไม่มีเส้นตรง ตัวอย่าง (mockup): ฉันคิดว่า 1 สามารถทำได้โดยการทำให้รูปหลายเหลี่ยมเบลอ แต่ฉันไม่แน่ใจว่าจะทำอย่างไรกับ 2 คุณจะดำเนินการเกี่ยวกับเรื่องนี้อย่างไร?

2
ฉันควรจะใช้สไปรต์ฮีตเพราะรูปภาพจำนวนมากมายของฉันหรือไม่?
ฉันกำลังพัฒนาเกม 2D และฉันมีสไปรต์มากมาย ฉันใช้ภาพเคลื่อนไหวและโมเดล 3 มิติเพื่อแสดงเป็น 2D เพื่อให้พวกเขาเห็นว่า "Fallout" หรือ "Diablo" นอกจากนี้ยังง่ายกว่าการวาดด้วยมือฮ่า ๆ ฉันต้องลดอัตราเฟรมลงเหลือ 15 เฟรมต่อวินาทีซึ่งต่ำที่สุดที่ฉันสามารถลดได้โดยไม่ทำให้พวกเขาดูขาด ๆ หาย ๆ อย่างไรก็ตามมันเป็นเรื่องน่าเศร้าเนื่องจากมี 24 เฟรมที่ดูราบรื่น มีสองเหตุผลที่ฉันทำสิ่งนี้: 1) ลดพื้นที่ HDD ยิ่งภาพน้อยลงเท่าไหร่เกมของฉันก็ยิ่งเล็กลงเท่านั้น 2) ลดปริมาณการใช้ RAM ยิ่งฉันโหลดภาพน้อยลงเท่าไหร่ฉันก็ยิ่งมีแนวโน้มที่จะหลีกเลี่ยงปัญหาที่ทำให้เกิดข้อ จำกัด RAM ของฉันมากขึ้นเท่านั้น อย่างไรก็ตามหากมีวิธีการบีบอัดภาพในพื้นที่ HDD และ RAM ฉันจะทำเช่นนั้น ฉันได้ทำการทดสอบมาก่อนและส่วนใหญ่ไม่ได้รับการเปลี่ยนแปลงคุณภาพใด ๆ เมื่อให้จาก RGBA8888 เป็น RGBA5555 และมีการเข้าชมเพียงเล็กน้อยเมื่อแปลงเป็น RGBA4444 ในโปรแกรม TexturePacker ของฉัน …

4
การตรวจจับการชนกันที่รวดเร็วยิ่งขึ้น
เมื่อไม่นานมานี้ฉันกำลังทำงานกับนักแม่นปืน 2d ที่รวดเร็วและฉันเจอปัญหาอันยิ่งใหญ่ ตรวจจับการชนกัน แน่นอนว่ามันใช้งานได้ แต่ช้ามาก เป้าหมายของฉันคือ: มีศัตรูจำนวนมากบนหน้าจอและให้พวกเขาไม่ได้สัมผัสกัน ศัตรูทั้งหมดกำลังไล่ตามเอนทิตีของผู้เล่น ส่วนใหญ่มีความเร็วเท่ากันดังนั้นไม่ช้าก็เร็วพวกเขาทั้งหมดก็ลงเอยด้วยการเว้นวรรคขณะไล่ล่าผู้เล่น สิ่งนี้ทำให้ปัจจัยความสนุกลดลงอย่างมากสำหรับผู้เล่นดูเหมือนว่าคุณจะถูกไล่ล่าโดยศัตรูเพียงคนเดียวเท่านั้น เพื่อป้องกันไม่ให้พวกเขาใช้พื้นที่เดียวกันฉันได้เพิ่มการตรวจจับการชนกัน (การตรวจจับ 2D ขั้นพื้นฐานมากซึ่งเป็นวิธีเดียวที่ฉันรู้) ซึ่งก็คือ Enemy class update method Loop through all enemies (continue; if the loop points at this object) If enemy object intersects with this object Push enemy object away from this enemy object มันใช้งานได้ดี ตราบใดที่ฉันมี <เอนทิตีศัตรู …

3
วิธีที่ดีที่สุดในการจัดการการชนพร้อมกันในเครื่องมือฟิสิกส์คืออะไร?
ฉันเขียนเอนจิ้นฟิสิกส์ 2d ใน javascript เพื่อให้ฉันสามารถเรียนรู้เพิ่มเติมเกี่ยวกับฟิสิกส์ในวิดีโอเกม ฉันให้มันทำงานอย่างถูกต้องสำหรับการชนกันของร่างกายที่แข็งยกเว้นถ้าร่างกายใด ๆ ชนกับร่างกายสองคนหรือมากกว่าในเวลาเดียวกัน ขณะนี้สำหรับร่างกายที่ชนกันแต่ละคู่ (A, B) ฉันปรับเปลี่ยนความเร็วและความเร็วเชิงมุมของพวกเขาตามแรงกระตุ้นการชนและผลักมันออกจากกัน แต่จากนั้นการตรวจจับการชนและการคำนวณแรงกระตุ้นสำหรับการชนอื่น ๆ ที่เกี่ยวข้องกับ A จะผิด ฉันสามารถสำรวจวิธีใดเพื่อให้เครื่องยนต์ทำงานกับวัตถุ 3+ ที่ชนกัน

1
วิธีการจำลองความสูงในเกมจากบนลงล่างของกระเบื้อง
ฉันจะจำลองความสูงในเกม 2D แบบบนลงล่างได้อย่างไร วิธีหนึ่งที่ฉันคิดคือการสร้างกระเบื้องที่ควรจะมีความสว่างสูงกว่า แต่ฉันสงสัยว่ามีการใช้มาตรฐานหรือดีกว่า

2
ให้แน่ใจว่าเขาวงกตแผนที่บ้านพร้อมลิฟต์สามารถแก้ไขได้หรือไม่
ในเกมของฉันเราเห็นพื้นของบ้านจากด้านข้างและฮีโร่สามารถใช้ลิฟท์ได้ - ลิฟท์จะยกขึ้น (ไปที่ลิฟท์ถัดไปขึ้นไป) หรือลง (ขึ้นไปที่ลิฟท์ถัดไป) ขึ้นอยู่กับลูกศร แสดงแล้วและมีลิฟท์สองตัวเชื่อมต่ออยู่เสมอ นั่นเป็นวิธีเดียวที่ฮีโร่สามารถเคลื่อนที่ในแนวตั้งได้แม้ว่าเขาสามารถเคลื่อนที่ในแนวนอนได้อย่างอิสระ แผนที่บ้านเป็นตาราง 11x5 แบบสุ่มที่มีรายการแตกต่างกันและผนังที่ไม่มีใครเทียบได้ไปทางซ้ายสุดทางขวาสุดและบางครั้งอยู่ในตำแหน่งตรงกลางสองตำแหน่ง: คำถามของฉัน: ฉันจะแน่ใจได้อย่างไรว่าแผนที่จะถูกสุ่ม แต่ยังสามารถแก้ไขได้ตลอดเวลาและฮีโร่ที่เริ่มต้นที่ด้านซ้ายของชั้นล่างสามารถปล่อยให้มันผ่านการยกขึ้นชี้ขึ้นที่ชั้นบนได้อย่างไร สำหรับสิ่งที่คุ้มค่าฉันกำลังใช้ภาษา Lua เพื่อการพัฒนา ขอบคุณมาก!
13 2d  maze 

1
ฉันจะกำหนดพื้นที่การชนที่ซับซ้อนที่ด้านบนของแผนที่ย่อยได้อย่างไร
ตามที่หลายคนแนะนำฉันใช้โปรแกรมแก้ไขแผนที่แบบเรียงต่อกันเพื่อสร้างแผนที่สำหรับเกมของฉันและมันยอดเยี่ยมโดยเฉพาะอย่างยิ่งเนื่องจากกรอบงาน libgdx ยังมี API สำหรับแผนที่จากกระเบื้องด้วย ฉันเข้าใจว่าฉันสามารถกำหนดไทล์ที่ชนกันได้หรือไม่อยู่ในตัวแก้ไขแผนที่เพื่อให้ฉันสามารถจัดการกับการชนกันในรหัสของฉันได้ แต่ตอนนี้ฉันอยู่ในสถานการณ์ที่ฉันต้องแบ่งกระเบื้องออกเป็นพื้นที่ที่สามารถชนกันได้และไม่ยุบตัว ด้วยตนเองฉันคิดว่าฉันสามารถกำหนดจุดและขอบเขตของสองพื้นที่และจัดการกับโปรแกรม แต่นั่นเป็นงานที่ต้องใช้เวลามาก ดังนั้นฉันจึง googled มากและพบตัวแก้ไขฟิสิกส์นี้ ดูเหมือนว่าเป็นเครื่องมือที่ยอดเยี่ยมในการทำให้กระบวนการที่ฉันกล่าวไว้ข้างต้นเป็นอัตโนมัติ อย่างไรก็ตามระบบใช้งานได้กับอิมเมจที่คลายการบีบอัดแต่ละอันและฉันไม่แน่ใจว่ามันจะใช้ได้แม้ว่าฉันจะแกะอิมเมจสำหรับการทำงาน ฉันสงสัยว่ามีวิธีใดที่ดีกว่าในการทำกระบวนการทั้งหมดนี้ในการกำหนดพื้นที่ปะทะกัน ข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก

2
คุณจะจัดการกับไพ่ที่ไม่สม่ำเสมอในขณะที่เรนเดอร์แผนที่อย่างไร
นี่คือสิ่งที่ฉันต้องการจะทำกับแผนที่ย่อยที่ฉันไม่แน่ใจ ในขณะที่คุณสามารถเห็นผนังด้านบนมีขนาดใหญ่ขึ้นจากนั้นด้านล่างและด้านข้าง (นี่เป็นปัญหากับมุมของฉันซึ่งเป็นรูปร่างแปลก ๆ ) ฉันได้แนบแผ่นกระเบื้องที่ฉันใช้เพื่อแสดงให้เห็นว่ามุมและท็อปส์ซูมีลักษณะอย่างไรเมื่อเทียบกับส่วนที่เหลือของกระเบื้อง สิ่งที่ฉันคิดคือฉันอาจจะสามารถวาดพวกเขาโดยใช้อาร์เรย์เดียวกับที่ฉันมีถ้าฉันใช้ความกว้างและความสูงของกระเบื้องแทนชุด WxH? ฉันไม่รู้ว่ามันจะใช้งานได้ดีแค่ไหน แต่บล็อกที่จะมีค่าต่างกันจะเป็นบล็อคที่ผู้เล่น / NPC ไม่สามารถเดินต่อไปได้แล้วมันอาจจะไม่เป็นปัญหาอีกครั้งฉันไม่แน่ใจด้วยซ้ำ วิธีการแก้. รหัสของฉันในกรณีที่คุณต้องการดูว่าฉันจัดการกับมันอย่างไร: Map.java (pastebin) (แก้ไข: ฉันไม่จัดการมันหมายความว่าฉันกำลังทำแผนที่อยู่ในขณะนี้) tl; dr - ฉันจะใช้แผนที่ดูแผนที่แบบกระเบื้อง 2d ของฉันและเปลี่ยนเป็นรูปแบบขนาดอื่นได้อย่างไร หรือมีวิธีที่ดีกว่าในการทำสิ่งที่ฉันพยายามจะทำอย่างไร มีชื่อของวิธีการที่ฉันควรมองหาในขณะที่ googling หรือไม่?
13 2d  java  tiles  maps 

4
ฟิสิกส์ยานพาหนะด้วยการลื่นไถล
ฉันจะสร้างฟิสิกส์รถยนต์สำหรับรถยนต์ที่สามารถยึดเกาะถนนได้อย่างไร ฉันต้องการให้ดูเหมือนว่าคนขับมีเท้าแบนดังนั้นเมื่อคุณกดแก๊สพวกเขาขับรถ (ด้านหลัง) ล้อลากฉับและทำให้ควบคุมได้ยาก ฉันต้องการทำโดนัทและ "ล่องลอย" รอบมุม ฉันต้องรู้ด้วยว่า "ลื่นไถล" เกิดขึ้นได้อย่างไรดังนั้นฉันสามารถเพิ่มเครื่องหมายควันและยางในสัดส่วน สมมติว่าเป็นเกมรถสไตล์ 2d จากบนลงล่าง ขอบคุณ
13 2d  physics 

2
ฉันจะทำให้ตัวละคร 2D ของฉันยืนอยู่บนความชันได้อย่างไร
ฉันมีตัวละครตัวนี้ใน Unity3D (โหมด 2D) ... ในความชันที่ดูเหมือนนี้ แต่ฉันต้องการให้ตัวละครยืนตามเส้นสีแดง .. เหมือนด้านล่าง ฉันจะสร้างมันใน Unity3d ได้อย่างไร ฉันได้ตั้งค่านี้แล้ว ฉันกำลังใช้ Addforce แบบง่ายสำหรับการเคลื่อนย้าย ... หากฉันลบข้อ จำกัด ตำแหน่ง z ส่งผลให้เกิดการเคลื่อนไหวแปลก ๆ เช่นการกลิ้งและอื่น ๆ .... ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม :)

5
ฉันจะแปลงจากพื้นที่พิกัดทั่วโลกเป็นพื้นที่ท้องถิ่นได้อย่างไร
กำหนดเอนทิตีที่ชื่อEntityAฉันต้องการกำหนดพื้นที่พิกัดเฉพาะที่ซึ่งตำแหน่งของEntityAเป็นจุดเริ่มต้นเวกเตอร์ส่วนหัวของมันคือแกน X และปกติของเวกเตอร์หัวเรื่องคือแกน Y: จากพิกัดโลกของพวกเขาฉันจะค้นหาตำแหน่งของเอนทิตี้อื่นในEntityAพื้นที่ท้องถิ่นได้อย่างไร ตัวอย่าง: EntityAตำแหน่งส่วนกลางของ (50,50) และตำแหน่งนั้นEntityBคือ (80,90) ตำแหน่งของEntityBในEntityAพื้นที่ท้องถิ่นคืออะไร? แก้ไข: กรุณาใช้คณิตศาสตร์ง่ายๆ

4
วิธีจัดการกับภาพขนาดใหญ่โดยพลการในเกม 2D?
คำถาม เมื่อคุณมีเกม 2D ที่ใช้ภาพที่มีขนาดใหญ่มาก (ใหญ่กว่าฮาร์ดแวร์ของคุณสามารถรองรับได้) คุณจะทำอย่างไร อาจมีวิธีแก้ปัญหาที่น่าสนใจสำหรับปัญหานี้ซึ่งไม่เคยเกิดขึ้นกับฉันมาก่อน ฉันกำลังทำงานกับผู้สร้างเกมผจญภัยกราฟิก ผู้ชมเป้าหมายของฉันคือผู้ที่มีประสบการณ์การพัฒนาเกม (และการเขียนโปรแกรม) เพียงเล็กน้อยหรือไม่มีเลย หากคุณทำงานกับแอปพลิเคชันเช่นนี้คุณไม่ต้องการให้มันจัดการกับปัญหาภายในแทนที่จะบอกให้คุณ "แยกภาพของคุณออก" บริบท เป็นที่ทราบกันดีว่าการ์ดกราฟิกกำหนดข้อ จำกัด เกี่ยวกับขนาดของพื้นผิวที่สามารถใช้ได้ ตัวอย่างเช่นเมื่อทำงานกับ XNA คุณจะถูก จำกัด ขนาดพื้นผิวสูงสุดที่ 2048 หรือ 4096 พิกเซลขึ้นอยู่กับโปรไฟล์ที่คุณเลือก โดยทั่วไปแล้วสิ่งนี้จะไม่ก่อปัญหามากในเกม 2D เพราะส่วนใหญ่มีระดับที่สามารถสร้างจากชิ้นส่วนที่เล็กกว่า (เช่นแผ่นกระเบื้องหรือสไปรต์ที่ถูกเปลี่ยนรูป) แต่ลองคิดถึงเกมผจญภัยกราฟิก point'nclick แบบคลาสสิค (เช่น Monkey Island) ห้องพักในเกมผจญภัยกราฟิกมักจะได้รับการออกแบบโดยรวมโดยมีส่วนที่ทำซ้ำได้น้อยหรือไม่มีเลยเหมือนกับจิตรกรที่ทำงานในแนวนอน หรืออาจเป็นเกมเช่น Final Fantasy 7 ที่ใช้ฉากหลังที่มีการแสดงผลขนาดใหญ่ ห้องเหล่านี้บางห้องมีขนาดใหญ่พอสมควรซึ่งมีความกว้างตั้งแต่สามหน้าจอขึ้นไป ตอนนี้ถ้าเราพิจารณาภูมิหลังเหล่านี้ในบริบทของเกมความละเอียดสูงที่ทันสมัยพวกเขาจะเกินขนาดพื้นผิวที่รองรับสูงสุดได้อย่างง่ายดาย ตอนนี้ทางออกที่ชัดเจนของเรื่องนี้คือการแบ่งพื้นหลังออกเป็นส่วนย่อย ๆ ที่พอดีกับความต้องการและวาดมันเคียงข้างกัน แต่คุณ (หรือศิลปินของคุณ) จะต้องเป็นคนที่แยกพื้นผิวทั้งหมดของคุณหรือไม่ …
13 xna  c#  2d  graphics  textures 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.