การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

2
ส่วนต่อประสานผู้ใช้ที่“ คล่องตัว” คืออะไร?
ฉันเจอคำว่าอินเทอร์เฟซผู้ใช้ "คล่องตัว" และฉันสงสัยว่ามันแตกต่างจากส่วนต่อประสานผู้ใช้ประเภทอื่น ๆ อย่างไร? อะไรคือความแตกต่างระหว่างอินเทอร์เฟซผู้ใช้ที่ "คล่องตัว" และ "ไม่คล่องตัว"
12 ui-design 

2
ทำซ้ำพื้นผิวใน libgdx
วิธีเติมภูมิภาคด้วยพื้นผิวซ้ำ ๆ ตอนนี้ฉันใช้วิธีถัดไป: spriteBatch.begin(); final int tWidth = texture.getWidth(); final int tHeight = texture.getHeight(); for (int i = 0; i < regionWidth / tWidth; i++) { for (int k = 0; k < regionHeight / tHeight; k++) { spriteBatch.draw(texture, i*tWidth, k); } } spriteBatch.end(); มันชัดเจนมาก อาจจะมีวิธีการใด ๆ ในตัว?

2
จางหายไปในเกมที่เก่ากว่า ต้องการความช่วยเหลือในการหาวิธีที่อัลกอริทึมได้รับมา
ขออภัยคำถามนี้ลึกลับเล็กน้อย แต่ฉันไม่สามารถเอามันออกไปจากหัวของฉันได้! ฉันกำลังมองหาอัลกอริทึมจางที่ใช้ในเกมอาเขต DoDonPachi (เช่นเดียวกับเกมอื่น ๆ ที่เก่ากว่า): ฉันเขียนสคริปต์หลามเพื่อเลือกพิกเซลสักสองสามและติดตามพวกเขาในช่วงเวลาที่จางหายไป นี่คือตัวอย่างของผลลัพธ์ แถวแรกของแต่ละกลุ่มคือค่าสีเริ่มต้นในขณะที่แต่ละแถวถัดมาคือความแตกต่างระหว่างค่าสีของเฟรมปัจจุบันและค่าสีของเฟรมก่อนหน้า Starting Value: (132, 66, 189) Frame 1: [9, 9, 8] Frame 2: [8, 8, 8] Frame 3: [8, 8, 8] Frame 4: [8, 8, 9] Frame 5: [9, 9, 8] Frame 6: [8, 8, 8] Frame 7: [8, 8, 8] …
12 algorithm  arcade 

2
การตรวจจับการชนกันและการตอบสนองใน Entity System
สนุกยิ่งขึ้นด้วย ES ... ปัจจุบันฉันมีระบบน้อย: Renderer (แอตทริบิวต์ Renderable, แอตทริบิวต์การแปลง) การเคลื่อนไหว (แอตทริบิวต์ที่เคลื่อนย้ายได้, การแปลงแอตทริบิวต์, แอตทริบิวต์ที่แสดงผลได้ [สำหรับกล่องขอบ ฯลฯ ]) อินพุต (แอตทริบิวต์ InputReceiver) เป็นต้น ฉันกำลังเพิ่มการตรวจจับการชน ความคิดแรกของฉันคือการเพิ่มระบบใหม่ที่ดำเนินการชนกัน มันสมเหตุสมผลสำหรับฉันที่จะแยกสิ่งนี้ออกจากMotionระบบเนื่องจากไม่ใช่ทุกสิ่งที่เคลื่อนไหวหรือเป็นภาพเคลื่อนไหวจำเป็นต้องมีส่วนร่วมในการตรวจจับการชนกัน - กล้องหมอก ฯลฯ - แต่ดูเหมือนว่าCollisionและMotionมันพึ่งพาซึ่งกันและกัน เมื่อไหร่ Motionย้ายเอนทิตีการแปลงจะต้องได้รับการตรวจสอบความถูกต้องCollisionและการเคลื่อนไหวจะถูกยกเลิกหรือปรับ (การกระดอนหยุดที่ผนัง ฯลฯ ) อีกทางเลือกหนึ่งคือการสร้างแอตทริบิวต์ Collidable ที่รักษาการอ้างอิงไปยังวัตถุการชน - kd-tree, octree เป็นต้นที่ใช้ร่วมกันระหว่างเอนทิตีที่สามารถชนกัน Motionระบบแล้วจะตรวจสอบสำหรับแอตทริบิวต์นั้นและใช้มันในการตรวจสอบหรือปรับการเคลื่อนไหว จากมุมมองของรหัสนั่นเป็นทางออกที่ยอมรับได้ อย่างไรก็ตามจากมุมมองสถาปัตยกรรมของ ECS ดูเหมือนว่ามันเป็นการผลักตรรกะในMotionระบบที่ไม่สามารถใช้กับเอนทิตีทั้งหมดที่มีMovableแอตทริบิวต์ ฉันยังสามารถจัดเก็บเวคเตอร์แบบเคลื่อนไหวในMovableแอตทริบิวต์และColliderปรับระบบTransformตามต้องการ แต่จะเกี่ยวข้องกับการทำซ้ำการทำงานระหว่างMotionและColliderหรือการโทรกลับจากColliderไปยังMotionด้วยข้อมูลบางอย่างเกี่ยวกับตำแหน่งการชนและข้อมูลพื้นผิวสำหรับการตีกลับ / การสะท้อน ฯลฯ . …

4
กับดักหนูใน SDL
ฉันจะดักจับเมาส์ของผู้ใช้ในเกมได้อย่างไร มันไม่ใช่เกมแบบเต็มหน้าจอ แต่ฉันต้องการมันเพื่อที่ผู้ใช้จะไม่สามารถลากเมาส์ไปด้านนอกหน้าจอ ฉันต้องตรวจสอบพิกัดของเมาส์และ SDL_WarpCursor เพื่อให้พูดในหน้าต่าง (ด้วยตนเอง) หรือมีวิธีอัตโนมัติหรือไม่? ขอบคุณ.
12 sdl  input  mouse 

2
ไทล์แม็พใน Entity System Framework
ฉันอ่านกรอบ Entity System เป็นพิเศษโดยเฉพาะอาร์ทิมิส ฉันพยายามตัดสินใจว่ามันเหมาะสมกับฉันหรือไม่ ฉันทำงานบนเกมอาร์ตพิกเซล 2d อย่างเคร่งครัดและฉันไม่คิดว่าพวกเขาจะต้องใช้ทรัพยากรมากนัก ฉันเคยใช้ OOP มาตรฐานมาแล้วและมีมรดกมากมายในอดีต ความเข้าใจของฉันเกี่ยวกับ Entity System Framework ตอนนี้ (ฉันไม่แน่ใจว่าฉันเข้าใจทั้งหมดหรือไม่) คือ: เอนทิตีเป็นอะไรนอกจาก ID ส่วนประกอบคืออะไร แต่ข้อมูลที่เป็นใบ้เพิ่มไปยังกลุ่มส่วนประกอบเอนทิตี ระบบคือฟังก์ชั่นอัปเดตที่เชื่อมต่อกับโลกเพื่อจัดการทุกเอนทิตีที่ตรงกับลายเซ็นองค์ประกอบของระบบ หากความเข้าใจของฉันถูกต้องฉันก็มีปัญหานิดหน่อยที่จะเพิ่มแนวความคิดในการเพิ่ม tilemaps และ AI Behavioral Trees ในกรอบนี้ ฉันจะถามเกี่ยวกับ AI ในอนาคต ควรมีการสร้าง tilemap ในเฟรมเวิร์กนี้หรือไม่? หรือควรแยกไว้ต่างหากเพื่อให้ง่ายต่อการสร้างด้วยโปรแกรมแก้ไข tilemap? ถ้า tilemap ควรสร้างไว้ในเฟรมเวิร์กนี้แต่ละไทล์เป็นเอนทิตีที่แตกต่างกันหรือไม่? และ tilemap เป็นระบบ? หรือเป็น tilemap เองเอนทิตีเดียวที่มีการสืบทอดสร้างขึ้นจากมัน? หาก tilemap กระจายตัวอะไรจะเป็นวิธีที่ดีที่สุดในการตรวจจับการชนกันของเอนทิตีเทียบกับ …

5
สมดุลในทางปฏิบัติของกลไกวิดีโอเกม "โอกาส"
ฉันเป็นผู้พัฒนาและออกแบบเกมเล็ก ๆ มาหลายปีและฉันเพิ่งเริ่มทำงานกับเอกสารการออกแบบที่จริงจังมากขึ้นสำหรับโครงการขนาดใหญ่ ชุดรูปแบบทั่วไปที่ฉันใช้ในการเป็นความไม่สมดุลเมื่อมันมาถึง "โอกาส" กลศาสตร์ RPG โอกาสโจมตีติดคริติคอล โอกาสที่จะ Hit / Dodge / Miss / Parry / Block เป็นต้น ปัญหาที่ใหญ่ที่สุดในเกม RPG สมัยใหม่คือแฟคตอริ่งใน Haste (Attack Speed) เนื่องจากมันรวมตัวกันเป็นอย่างมากกับกลไกพื้นฐานอื่น ๆ เห็นได้ชัดว่ายิ่งมีการโจมตีผู้เล่นเพิ่มอัตราการโจมตีทางอ้อมหรือการโจมตีที่รุนแรง สิ่งนี้สร้างความไม่สมดุลอย่างมหาศาลและโซลูชันส่วนใหญ่มาในรูปแบบของการเร่งด่วนสูงสุดหรือใช้ประโยชน์จากผลตอบแทนที่ลดลงหรือเพื่อฆ่าสถิติที่เพิ่มขึ้นมาก ในฐานะนักออกแบบและผู้เล่นฉันไม่รู้สึกว่านี่เป็นวิธีที่ดีต่อสุขภาพในการจัดการกับปัญหา มันไม่ใช่ทางออกที่ "สนุก" เมื่อเร็ว ๆ นี้นักเล่นเกมเห็นคำตอบของ Blizzard สำหรับปัญหา Haste นี้ใน Diablo3 โดยการเพิ่มค่าครึ่งหนึ่งของไอเท็มส่วนใหญ่ นี่คือตัวอย่างที่ใช้งานได้จริง: โอกาส 50% ที่จะโจมตีอย่างรุนแรงด้วยการโจมตี 1 ครั้งต่อวินาที = โดยเฉลี่ยการโจมตีคริติคอล 0.5 …

1
แนวปฏิบัติที่ดีที่สุดสำหรับการสื่อสารระหว่างนักออกแบบเกมและศิลปิน
ฉันมีปัญหาใหญ่ในการแบ่งปันแนวคิดและสื่อสารความคิดของฉันกับศิลปิน พวกเขาเป็นเพื่อนที่ไม่ได้รับค่าเล็กน้อยช่วยฉันดังนั้นฉันจึงไม่ต้องการเสียเวลาพยายามคิดว่าฉันมีอะไรอยู่ในใจ และภาพร่างเส็งเคร็งของฉันดูเหมือนจะไม่เพียงพอ คุณสื่อสารกับศิลปินเพื่อสร้างเนื้อหาได้อย่างไร แม่แบบชนิดใดที่ใช้กันทั่วไป ฉันกำลังมองหาแนวปฏิบัติที่ดีที่สุดและเทมเพลตเพื่อกำหนดตัวละครสินทรัพย์ภูมิหลัง
12 art 

3
หลักการออกแบบเกมสำหรับผู้เล่นหลายคนแบบเรียลไทม์สำหรับ Node.js
ฉันได้อ่านวาล์วบทความเกี่ยวกับเครือข่ายผู้เล่นหลายที่ได้รับการดัดแปลงมาจาก Yahn เนียกระดาษ 2001 เรียกว่าแฝงชดเชยวิธีการในไคลเอ็นต์ / เซิร์ฟเวอร์ในเกมการออกแบบโปรโตคอลและการเพิ่มประสิทธิภาพ ฉันกำลังสร้างเกมผู้เล่นหลายคนเรียลไทม์โดยใช้เซิร์ฟเวอร์ node.js ที่เชื่อมต่อกับลูกค้าผ่าน socket.io และฉันมีคำถามสองสามข้อเกี่ยวกับหลักการที่อธิบายไว้ด้านล่าง: การแก้ไขเอนทิตี [การแก้ไข] ป้องกันการเคลื่อนไหวที่กระวนกระวายใจซึ่งสิ่งนี้มักจะนำไปสู่โดยการอัพเดทเซิร์ฟเวอร์บัฟเฟอร์จากนั้นเล่นกลับด้วยช่องว่างที่สอดแทรกอย่างราบรื่นระหว่าง นอกจากนี้ยังสามารถป้องกันข้อบกพร่องที่เกิดจากการสูญเสียต การทำนายฝั่งไคลเอ็นต์ การทำนายคือแนวคิดของลูกค้าที่ทำนายผลกระทบของการกระทำของผู้เล่นท้องถิ่นโดยไม่ต้องรอให้เซิร์ฟเวอร์ยืนยัน สถานะที่คาดการณ์ของเอนทิตีถูกทดสอบกับคำสั่งเซิร์ฟเวอร์เมื่อมาถึงจนกว่าจะตรวจจับคู่หรือจับคู่ผิด การชดเชยความล่าช้า การชดเชยความล่าช้าคือแนวคิดของเซิร์ฟเวอร์โดยใช้เวลาแฝงของผู้เล่นในการย้อนเวลาเมื่อประมวลผล [ผู้ใช้งาน] เพื่อดูว่าผู้เล่นเห็นอะไรเมื่อคำสั่งถูกส่ง เมื่อใช้ร่วมกับการคาดการณ์การชดเชยความล่าช้าจะช่วยต่อสู้กับเวลาแฝงของเครือข่ายจนถึงจุดที่เกือบกำจัดมันออกจากมุมมองของผู้โจมตี หลักการใช้กับ TCP เช่นเดียวกับที่ทำกับ UDP และจะมีความแตกต่างในการนำไปใช้หรือไม่? ฉันเห็นว่าการแก้ไขเอนทิตีไม่จำเป็นต้องป้องกันการสูญหายของแพ็คเก็ต แต่ก็เกี่ยวกับมัน ฉันสามารถสื่อสารระหว่างเซิร์ฟเวอร์กับเว็บเบราว์เซอร์และกลับกันโดยใช้ UDP และ Node.js ได้หรือไม่ เนื่องจากกระดาษมีอายุเกินหนึ่งทศวรรษหลักการเหล่านี้ยังคงใช้งานอยู่หรือมีเทคโนโลยีอื่นปรากฏขึ้นมา? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

4
การกำหนดรูปทรงเรขาคณิตใน OpenGL ES 2.0
ฉันวางแผนที่จะทำรูปทรงเรขาคณิตใน OpenGL ES 2.0 โดยทั่วไปฉันวางแผนที่จะแสดงรูปทรงเรขาคณิตเดียวกัน (เก้าอี้) อาจจะ 1,000 ครั้งในฉากของฉัน วิธีที่ดีที่สุดในการทำสิ่งนี้ใน OpenGL ES 2.0 คืออะไร? ฉันกำลังพิจารณาส่งโมเดลดู mat4 เป็นแอตทริบิวต์ เนื่องจากแอตทริบิวต์เป็นข้อมูลต่อยอดฉันต้องผ่าน mat4 เดียวกันนี้สามครั้งสำหรับแต่ละจุดยอดของรูปสามเหลี่ยมเดียวกัน (เนื่องจาก modelview ยังคงคงที่ข้ามจุดยอดของรูปสามเหลี่ยม) นั่นจะเป็นข้อมูลพิเศษจำนวนมากที่ส่งไปยัง GPU (2 จุดยอดพิเศษ * 16 ลอย * (จำนวนสามเหลี่ยม) จำนวนข้อมูลพิเศษ) หรือฉันควรจะส่ง mat4 เพียงครั้งเดียวต่อรูปสามเหลี่ยม แต่วิธีที่เป็นไปได้โดยใช้คุณลักษณะเนื่องจากแอตทริบิวต์ถูกกำหนดเป็นข้อมูล "ต่อยอด" วิธีที่ดีที่สุดและมีประสิทธิภาพในการทำอินสแตนซ์ใน OpenGL ES 2.0 คืออะไร

3
การสร้างถนน / แม่น้ำบนแผนที่ตาราง 2d
นี่เป็นคำถามที่มือใหม่ แต่ที่นี่มันไป: แผนที่ของฉันเป็นตาราง 2d และฉันต้องการสร้างถนนและแม่น้ำ เส้นทางจากจุดเริ่มต้นไปยังจุดสิ้นสุดต้องไม่เป็นเส้นทางที่ดีที่สุดในจำนวนไพ่ แต่ควรมีการสุ่มในระดับหนึ่ง (รอบ) มีอัลกอริธึมมาตรฐานสำหรับสิ่งนี้หรือไม่? ไชโย! UPDATE: นี่คือผลลัพธ์ของการเล่นกับน้ำหนักบนกริดและใช้อัลกอริธึมพา ธ สั้นที่สุด (Bellman-Ford) โดยใช้ไลบรารี jgrapht ฉันไปกับคำตอบของ Donutz หลังจากทั้งหมด http://pastebin.com/AGQGK5ik

1
ตรรกะการแยกทรี kd คืออะไร
ฉันพยายามหาวิธีใช้ต้นไม้ KD ในหน้า 322 ของ "การตรวจจับการชนกันแบบเรียลไทม์" โดยEricson ส่วนข้อความรวมอยู่ด้านล่างในกรณีที่หน้าตัวอย่างของหนังสือ Google ไม่อนุญาตให้คุณเห็นเวลาที่คุณคลิกที่ลิงก์ ส่วนข้อความ ส่วนที่เกี่ยวข้อง: แนวคิดพื้นฐานที่อยู่เบื้องหลังการตัดกันของเรย์หรือส่วนของเส้นกำกับที่มีต้นไม้ kd นั้นตรงไปตรงมา บรรทัดถูกตัดกับระนาบการแยกของโหนดและคำนวณค่า t ของการตัดกัน หาก t อยู่ภายในช่วงของบรรทัด 0 <= t <= tmax เส้นเลาะเลียบไปตามระนาบและลูกทั้งสองของต้นไม้ลงมาซ้ำ ๆ ถ้าไม่เพียง แต่ด้านที่มีต้นกำเนิดของกลุ่มนั้นจะถูกเยี่ยมชมซ้ำ ดังนั้นนี่คือสิ่งที่ฉันมี: ( เปิดภาพในแท็บใหม่หากคุณไม่เห็นตัวอักษร) ต้นไม้ตรรกะ ที่นี่แสงสีส้มกำลังผ่านฉาก 3 มิติ x แทนจุดตัดด้วยระนาบ จากซ้ายสุดฮิต: ด้านหน้าของลูกบาศก์ล้อมรอบฉาก ระนาบการแยก (1) ระนาบการแยก (2.2) ด้านขวาของลูกบาศก์ล้อมรอบฉาก แต่นี่คือสิ่งที่จะเกิดขึ้นอย่างไร้เดียงสาตามคำอธิบายพื้นฐานของ Ericson ด้านบน: ทดสอบกับเครื่องบินแยก …

1
ไม่ได้ผลลัพธ์ที่ต้องการด้วยการใช้ SSAO
หลังจากนำการเรนเดอร์มาใช้แล้วฉันลองเสี่ยงโชคด้วยการใช้ SSAO โดยใช้บทช่วยสอนนี้ น่าเสียดายที่ฉันไม่ได้รับสิ่งที่ดูเหมือน SSAO คุณสามารถดูผลลัพธ์ของฉันด้านล่าง คุณสามารถเห็นได้ว่ามีลวดลายแปลก ๆ บางอย่างและไม่มีเงาบังแดดที่จะต้องมี (เช่นระหว่างวัตถุและบนพื้นดิน) เฉดสีที่ฉันติดตั้งมีดังนี้: #VS #version 330 core uniform mat4 invProjMatrix; layout(location = 0) in vec3 in_Position; layout(location = 2) in vec2 in_TexCoord; noperspective out vec2 pass_TexCoord; smooth out vec3 viewRay; void main(void){ pass_TexCoord = in_TexCoord; viewRay = (invProjMatrix * vec4(in_Position, 1.0)).xyz; gl_Position …

4
การเข้ารหัสสถานะต่าง ๆ ในเกมผจญภัย
ฉันวางแผนเกมผจญภัยและไม่สามารถเข้าใจได้ว่าอะไรคือวิธีที่เหมาะสมในการใช้พฤติกรรมของระดับขึ้นอยู่กับสถานะของเรื่องราวที่ก้าวหน้า เกมผู้เล่นเดี่ยวของฉันมีโลกขนาดใหญ่ที่ผู้เล่นต้องโต้ตอบกับผู้คนในเมืองตามจุดต่าง ๆ ในเกม อย่างไรก็ตามขึ้นอยู่กับความก้าวหน้าของเรื่องราวสิ่งต่าง ๆ จะถูกนำเสนอต่อผู้เล่นเช่นหัวหน้ากิลด์จะเปลี่ยนสถานที่จากจัตุรัสกลางเมืองเป็นสถานที่ต่าง ๆ ทั่วเมือง; ประตูจะปลดล็อคในบางช่วงเวลาของวันหลังจากเสร็จสิ้นภารกิจประจำ เหตุการณ์หน้าจอ / ทริกเกอร์ที่แตกต่างกันเกิดขึ้นหลังจากเหตุการณ์สำคัญผ่านไปแล้วเท่านั้น ฉันคิดอย่างไร้เหตุผลว่าจะใช้คำสั่ง switch {} เพื่อตัดสินใจว่า NPC ควรพูดอะไรหรือควรจะหาคำตอบได้ที่ไหนและทำให้วัตถุประสงค์การสืบเสาะสามารถโต้ตอบได้หลังจากตรวจสอบสภาพของตัวแปร game_state ทั่วโลกแล้ว แต่ฉันรู้ว่าฉันจะวิ่งเข้าสู่สภาวะเกมและสวิทซ์เคสที่แตกต่างกันอย่างรวดเร็วเพื่อเปลี่ยนพฤติกรรมของวัตถุ คำสั่ง switch นั้นยากที่จะดีบั๊กอย่างหนาแน่นและฉันคิดว่ามันอาจยากที่จะใช้ในตัวแก้ไขระดับ ดังนั้นฉันคิดว่าแทนที่จะมีวัตถุเดียวที่มีหลายสถานะบางทีฉันควรมีหลายอินสแตนซ์ของวัตถุเดียวกันด้วยสถานะเดียว ด้วยวิธีนี้ถ้าฉันใช้บางอย่างเช่นเครื่องมือแก้ไขเลเวลฉันสามารถใส่ตัวอย่างของ NPC ลงในตำแหน่งต่าง ๆ ที่เขาเคยปรากฏมาและเป็นตัวอย่างสำหรับแต่ละสถานะการสนทนาที่เขามี แต่นั่นหมายความว่าจะมีวัตถุเกมที่มองไม่เห็นที่ไม่ได้ใช้งานจำนวนมากลอยอยู่รอบ ๆ ระดับซึ่งอาจเป็นปัญหาสำหรับหน่วยความจำหรือยากที่จะเห็นในเครื่องมือแก้ไขระดับฉันไม่รู้ หรือทำง่ายๆเหมือนกัน แต่แยกระดับสำหรับแต่ละสถานะของเกม นี่เป็นวิธีที่สะอาดและปราศจากข้อผิดพลาดในการทำสิ่งต่าง ๆ แต่มันให้ความรู้สึกเหมือนการทำงานด้วยมือขนาดใหญ่ทำให้แน่ใจว่าแต่ละระดับของรุ่นนั้นเหมือนกันจริง ๆ วิธีการทั้งหมดของฉันรู้สึกไม่มีประสิทธิภาพดังนั้นเพื่อสรุปคำถามของฉันมีวิธีที่ดีขึ้นหรือเป็นมาตรฐานในการใช้พฤติกรรมของระดับขึ้นอยู่กับสถานะของการดำเนินเรื่อง PS: ฉันยังไม่มีเครื่องมือแก้ไขเลเวล - คิดจะใช้ JME SDK หรือทำเอง

4
การพึ่งพาคลาสแบบวงกลม
การออกแบบไม่ดีหรือไม่ที่มี 2 คลาสที่ต้องใช้ซึ่งกันและกัน? ฉันกำลังเขียนเกมเล็ก ๆ ที่ฉันมีGameEngineชั้นเรียนที่มีGameStateวัตถุบางอย่าง ในการเข้าถึงวิธีการแสดงผลหลายวิธีGameStateวัตถุเหล่านี้จำเป็นต้องทราบGameEngineคลาสด้วย - ดังนั้นจึงเป็นการอ้างอิงแบบวนรอบ คุณจะเรียกการออกแบบที่ไม่ดีนี้หรือไม่? ฉันแค่ถามเพราะฉันไม่แน่ใจและในเวลานี้ฉันยังสามารถ refactor สิ่งเหล่านี้
12 c++  architecture 

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