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

Simple DirectMedia Layer (SDL) เป็นไลบรารีมัลติมีเดียข้ามแพลตฟอร์มที่ออกแบบมาเพื่อให้สามารถเข้าถึงเสียงแป้นพิมพ์เมาส์จอยสติ๊กฮาร์ดแวร์ 3D ในระดับต่ำผ่าน OpenGL และเฟรมบัฟเฟอร์วิดีโอ 2D

8
OpenGL, SFML และ SDL มีข้อได้เปรียบอะไรบ้างในการแสดงผลซอฟต์แวร์
ฉันเริ่มดูกระแส Handmade Heroที่ซึ่ง Casey Muratori สร้างเอ็นจิ้นเกมโดยไม่ต้องใช้เฟรมเวิร์กหรืออย่างนั้น เมื่อวานฉันไปถึงส่วนที่เขาแสดงให้เห็นว่าภาพวาดลงบนหน้าจออย่างไร เท่าที่ฉันเข้าใจเขาได้จัดสรรหน่วยความจำบางส่วนให้ใหญ่เท่ากับขนาดหน้าจอที่เขาต้องการวาด จากนั้นเขาสร้างบิตแมปที่เขาส่งไปยังหน่วยความจำบัฟเฟอร์ที่เขาจัดสรรและดึงมันไปที่หน้าจอโดยใช้ฟังก์ชั่นเฉพาะของระบบปฏิบัติการ นี่ดูเหมือนจะค่อนข้างตรงไปตรงมา ฉันใช้ GameMaker เปลี่ยนเป็น Love2D ทำงานเล็กน้อยกับ Sprite Kit แต่ฉันสงสัยอยู่เสมอว่าเกิดอะไรขึ้นภายใต้เลเยอร์นี้บางครั้งทำให้สับสน ระบุว่าทำไมแม้แต่ต้องใช้ห้องสมุดกราฟิก (OpenGL, SFML, SDL, ... ) เมื่อสิ่งที่คุณต้องทำคือเพียงจัดสรรบัฟเฟอร์บางส่วนผ่านบิตแมปและวาดลงบนหน้าจอ หากคุณต้องการวาดสิ่งที่แตกต่างให้กับหน้าจอคุณเพียงแค่เขียนลงในบิตแมปของคุณซึ่งจะถูกส่งผ่านไปยังบัฟเฟอร์ ฉันค่อนข้างใหม่กับการเขียนโปรแกรม แต่ดูเหมือนจะง่ายสำหรับฉัน โปรดแก้ไขฉันหากฉันผิด

3
หลายแพลตฟอร์มหลายเธรด: ความท้าทายที่แท้จริงคืออะไร
ในขณะที่ไลบรารี่อย่าง SDL มี API wrapper ข้ามแพลตฟอร์มสำหรับทำเกลียวฉันคิดว่ามันไร้เดียงสาที่จะคิดว่าสิ่งนี้นำไปสู่การพัฒนาเกมโดยตรงบนแพลตฟอร์มที่แตกต่างกันอย่างมากมาย (เดสก์ท็อป / มือถือ) เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหาการพัฒนาด้วยวิธีนี้ (ให้ข้ามเธรด API ใด ๆ ) พิจารณาดังต่อไปนี้: จำนวนแกนที่แตกต่างกัน ความสามารถในการประมวลผลที่แตกต่างกันอย่างมากมายต่อคอร์ สถาปัตยกรรมระบบที่แตกต่างโดยทั่วไปด้วยเช่น เวลาแฝงที่แตกต่างกันสำหรับการเข้าถึงแคช RAM และ I / O ฉันรู้สึกว่าวิธีเดียวที่จะทำเช่นนี้คือการประเมินจำนวนเธรดที่อาจเรียกใช้ต่ออุปกรณ์แต่ละชิ้นที่คุณต้องการสนับสนุนและค้นหาว่าตัวหารร่วมที่ต่ำที่สุดคืออะไร อย่างไรก็ตามสิ่งนี้ยังทำให้ฉันอยู่ในความมืดตามปริมาณการประมวลผลทั้งหมดที่มี ฉันคิดว่าวิธีเดียวที่จะทำสิ่งนี้ได้อย่างมีประสิทธิภาพคือการพัฒนาอย่างแข็งขันสำหรับอุปกรณ์พกพาที่ต่ำที่สุดที่ฉันตั้งใจจะให้การสนับสนุนตลอดการพัฒนา? - เช่นตัวหารร่วมที่ต่ำที่สุด? ควรประมาณว่าเพียงพอหรือไม่ หรือจะมีมากกว่านี้? แก้ไข: โปรดให้คนอื่นเสนอประสบการณ์เพิ่มเติมเกี่ยวกับเรื่องนี้เพราะฉันไม่รู้สึกว่าคำถามของฉันได้รับการตอบอย่างเต็มที่แล้ว

2
เทคนิคการจัดการอินพุตในเกมขนาดใหญ่
มีเทคนิคมาตรฐานในการจัดการอินพุตในเกมขนาดใหญ่หรือไม่ ขณะนี้ในโครงการของฉันการจัดการอินพุตทั้งหมดเสร็จในลูปเกมดังนี้: while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_QUIT: exit = 1; break; case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_c: //do stuff break; } break; case SDL_MOUSEBUTTONDOWN: switch(event.button.button){ case SDL_BUTTON_MIDDLE: //do stuff break; } } break; } (ฉันใช้ SDL แต่ฉันคาดหวังว่าหลักปฏิบัติจะใช้กับไลบรารีและกรอบงานด้วย) สำหรับโครงการขนาดใหญ่ดูเหมือนจะไม่ใช่ทางออกที่ดีที่สุด ฉันอาจมีวัตถุหลายอย่างที่อยากรู้ว่าผู้ใช้กดอะไรดังนั้นจึงเหมาะสมสำหรับวัตถุเหล่านั้นในการจัดการอินพุต อย่างไรก็ตามพวกเขาไม่สามารถจัดการอินพุตได้หลังจากที่ใครคนหนึ่งได้รับเหตุการณ์มันจะถูกผลักออกจากบัฟเฟอร์เหตุการณ์ดังนั้นวัตถุอื่นจะไม่ได้รับอินพุตนั้น วิธีใดที่ใช้กันมากที่สุดในการต่อต้านสิ่งนี้?
16 c++  sdl  input  standards 

5
ประโยชน์ของการกำหนดเฟรมต่อวินาทีคืออะไร (ถ้ามี)
ฉันกำลังทำงานกับเกมง่ายๆใน OpenGL โดยใช้ SDL สำหรับการเริ่มต้นการแสดงผลและการป้อนข้อมูลและปรากฏในแง่ของเวลาที่ฉันมีสองตัวเลือกให้ฉัน หมายเลขหนึ่งที่กำลังนอนหลับสำหรับ optimTimePerFrame - theTimeTakenToRender, เมื่อ optimTimePerFrame ในวินาที = 1 / theFramerateCap (ฉันไม่แน่ใจว่าสิ่งนี้จำเป็นหรือไม่เพราะมันเทียบเท่ากับการใช้ vsync ซึ่งอาจแม่นยำกว่านี้ถ้าการสันนิษฐานของฉันถูกต้องกรุณาบอกฉันทีว่า SDL + OpenGL มี vsync เป็นค่าเริ่มต้นหรือไม่อย่างไร เพื่อเปิดใช้งาน) ส่วนอีกอันคือการวัดเวลาตั้งแต่เฟรมสุดท้ายแสดงผลและปรับการเคลื่อนไหวตามนั้น (เวลาที่สั้นลงในการเรนเดอร์เฟรมจะทำให้เอนทิตีน้อยเคลื่อนไปในเฟรมนั้น) ในแง่ของประสิทธิภาพและการลดการสั่นไหว ฯลฯ ข้อดีและข้อเสียของสองวิธีนี้คืออะไร
13 opengl  sdl  frame-rate  vsync 

3
เทคนิคภาพเคลื่อนไหวใดที่ใช้ใน 'Dont Starve' [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ในขณะที่เล่นเกมไม่กี่เกมในช่วงเวลาส่วนตัวของฉันการพัฒนาฉันได้ข้ามเกมเอาชีวิตรอดแบบ 2D / 3D เห็นได้ชัดว่าเกมดังกล่าวสร้างขึ้นใน SDL และ GLUT (ไม่ต้องอดอาหาร) แต่สิ่งที่ทำให้ฉันประหลาดใจจริงๆคือภาพเคลื่อนไหวในเกม อนิเมชั่นนั้นราบรื่นและคล่องแคล่วเป็นอย่างมาก ไม่มีการบิดเบือนในขณะที่เคลื่อนไหวสิ่งที่มักเกิดขึ้นในแอนิเมชั่นที่ทำด้วยมือคือการลบพิกเซลส่วนภาพเคลื่อนไหวจะสั่นและพวกเขาก็ไม่ราบรื่น นั่นทำให้ฉันคิดว่าพวกเขาจะสามารถสร้างภาพเคลื่อนไหวที่มีคุณภาพเช่นนี้ได้อย่างไร พวกเขาทำด้วยมือจริง ๆ หรือไม่ (ถ้าเป็นเช่นนั้นมันต้องเป็นศิลปินที่มีความสามารถมาก ๆ ) มันเป็นอนิเมชั่นของกระดูกหรือพวกเขาใช้เทคนิคอื่นหรือไม่?
12 animation  sdl  glut 

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

2
วิธีคำนวณเวลาเดลต้าด้วย SDL
ฉันได้ยินมาว่าคุณสามารถคำนวณเวลาเดลต้าด้วยฟังก์ชันสองอย่างที่เรียกว่า SDL_GetPerformanceCounter และ SDL_GetPerformanceFrequency ฉันไม่แน่ใจว่าทำงานได้อย่างไร แต่ฉันได้ยินมาว่ามันคล้ายกับการใช้ SDL_GetTicks () Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } ฉันมีรหัสนี้ แต่เมื่อใดก็ตามที่ฉันพิมพ์ deltaTime หรือพยายามใช้มันจะเท่ากับตัวเลขสุ่มและตัวเลขบ้าเสมอ ถูกต้องหรือไม่
11 c++  algorithm  sdl 

2
ฉันควรกังวลอะไรเมื่อเปลี่ยนแหล่งกำเนิด OpenGL ไปที่ด้านซ้ายบนของหน้าจอ
เพื่อการศึกษาด้วยตนเองฉันเขียนเครื่องมือ platformer 2D ใน C ++ โดยใช้ SDL / OpenGL ตอนแรกฉันเริ่มต้นด้วย SDL บริสุทธิ์โดยใช้บทเรียนบน sdltutorials.com และ lazyfoo.net แต่ตอนนี้ฉันใช้ SDL เพื่อสร้างบริบทการแสดงผล OpenGL แล้วแสดงผลด้วยฟังก์ชั่น OpenGL (โหมดเฉพาะทันที แต่ฉันเรียนรู้เกี่ยวกับ VAOs / VBOs ) ฉันใช้ SDL สำหรับอินเตอร์เฟสเสียง ฯลฯ เท่านั้น SDL ใช้ระบบพิกัดที่มีจุดกำเนิดที่ด้านซ้ายบนของหน้าจอและแกน y บวกที่ชี้ลง ง่ายต่อการตั้งค่าการฉายภาพของฉันใน OpenGL เพื่อสะท้อนสิ่งนี้ ฉันรู้ว่าพิกัดพื้นผิวเป็นระบบทางด้านขวามือที่มีค่าตั้งแต่ 0 ถึง 1 - พลิกพื้นผิวในแนวตั้งก่อนที่จะทำการเรนเดอร์ (เช่นนั้นพลิกไฟล์ก่อนที่จะโหลด) ทำให้ได้พื้นผิวที่แสดงอย่างถูกต้อง ... พื้นผิวทั้งหมด …
11 c++  opengl  2d  sdl 

1
SDL blitting พื้นผิวหลาย ๆ อันพร้อมกัน
ฉันพยายามเขียนเกม platforming ที่ sprite สำหรับพื้นหลังเลเวลถูกแบ่งออกเป็นชิ้นขนาด 512x512 ฉันเก็บหน่วยความจำครั้งละ 3 ชิ้นและฉันพยายามเขียนโค้ดเพื่อทำให้หน้าจอทั้งสามปรากฏขึ้น นี่คือรหัสปัจจุบันที่ฉันมี: SDL_Rect where; where.y = -game->camera->y; where.x = -game->camera->x - MAP_WIDTH; SDL_BlitSurface(left_chunk, NULL, screen, &where); where.x = -game->camera->x; SDL_BlitSurface(center_chunk, NULL, screen, &where); where.x = -game->camera->x + MAP_WIDTH; SDL_BlitSurface(right_chunk, NULL, screen, &where); ปัญหาที่ฉันพบคือสิ่งใดก็ตามที่ถูกทำให้เป็นก้อนเป็นครั้งแรกเป็นสิ่งเดียวที่ปรากฏขึ้น ที่เหลือไม่ปรากฏบนหน้าจอ ฉันคิดว่าปัญหาอาจมีบางอย่างที่เกี่ยวข้องกับความโปร่งใสอัลฟ่า แต่แม้ว่าชิ้นส่วนจะไม่ทับซ้อนกันพวกเขาก็ยังคงล้มเหลว ในส่วนอื่น ๆ ของรหัสฉันจะทำหลายอย่างพร้อมกันบนหน้าจอในเวลาเดียวกันเช่นตัวละครและพื้นหลังและสิ่งเหล่านั้นจะปรากฏขึ้นอย่างถูกต้อง ส่วนของรหัสนี้เป็นพื้นที่เดียวที่ฉันพบปัญหานี้ หากฉันใส่ความคิดเห็นในบรรทัดที่ blits …
10 sdl 

1
ทรัพยากรสถาปัตยกรรมระบบการต่อสู้ JRPG แบบเลี้ยวตาม
หลายเดือนที่ผ่านมาฉันกำลังยุ่งกับการเขียนโปรแกรม 2D JRPG (RPG สไตล์ญี่ปุ่น) ใน C ++ โดยใช้ห้องสมุด SDL โหมดการสำรวจทำมากหรือน้อย ตอนนี้ฉันจัดการกับโหมดการต่อสู้ ฉันไม่สามารถหาแหล่งข้อมูลเกี่ยวกับวิธีการจัดโครงสร้างระบบการต่อสู้ JRPG แบบคลาสสิกได้ ทั้งหมดที่ฉันพบคือการอภิปรายเกี่ยวกับสูตรความเสียหาย ฉันได้ลองใช้ Google ค้นหากระดานข้อความของ gamedev.net และรวบรวมข้อมูลผ่าน C ++ - คำถามที่เกี่ยวข้องที่นี่ใน Stack Exchange ฉันได้ลองอ่านซอร์สโค้ดของ RPG แบบโอเพ่นซอร์สที่มีอยู่แล้ว แต่หากไม่มีแนวทางบางอย่างมันก็เหมือนกับการพยายามหาเข็มในกองหญ้า ฉันไม่ได้มองหาชุดของกฎอย่าง D&D หรืออะไรทำนองนั้น ฉันกำลังพูดถึงการออกแบบโค้ดและโครงสร้างวัตถุอย่างแท้จริง ระบบการต่อสู้ขอให้ผู้เล่นป้อนข้อมูลโดยใช้เมนู ถัดไปที่เทิร์นการต่อสู้จะถูกดำเนินการในฐานะวีรบุรุษและศัตรูดำเนินการกระทำของพวกเขา ใครช่วยชี้ฉันในทิศทางที่ถูกต้องได้ไหม ขอบคุณล่วงหน้า.
9 c++  2d  architecture  sdl  rpg 

1
เหตุใด V8 จึงไม่ทำงานกับเธรด SDL
ฉันสามารถคอมไพล์และเชื่อมโยง V8 กับเกมของฉันและการตีความโค้ดทำงานได้ดี อย่างไรก็ตามฉันต้องการแบ่งรหัสของฉันและลูปเกมควรมีอยู่ในเธรดเดียวและเอ็นจิ้นการเขียนสคริปต์ควรรันในเธรดที่สองข้างลูปเกมของฉัน ฉันใช้ SDL และลองใช้รหัสนี้เพื่อวางไข่เธรดใหม่ SDL_CreateThread(ScriptingEngine::SpawnMain, NULL); ที่รหัสต่อไปนี้เป็นเครื่องมือทดสอบสคริปต์ของฉัน: namespace ScriptingEngine { v8::HandleScope handleScope; v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); v8::Persistent<v8::Context> context; void Setup() { // TODO: bind functions to global // ... context = v8::Context::New(NULL, global); } int SpawnMain(void *arguments) { v8::Context::Scope scope(context); v8::Handle<v8::Script> script = v8::Script::Compile( v8::String::New("'Hello World'") ); …

1
การแยกโลจิคัล / อัพเดตจากโค้ดการแสดงผล / การวาดในเธรดเดี่ยวโดยใช้โหมดสลีป
ฉันได้อ่านแล้วว่าความเร็วของวัตถุในเกมไม่ควรถูกขัดขวางโดย FPS แต่ควรขึ้นอยู่กับเวลา ฉันจะแยกโค้ดอัปเดต / วาดเพื่อเพิ่มประสิทธิภาพได้สูงสุดโดยไม่ จำกัด อัตราการวาดและให้อัตราการอัปเดตตรรกะอย่างต่อเนื่องตามเวลาได้อย่างไร รหัสหลอกปัจจุบันของฉันเป็นดังนี้ loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } ปัญหาคือรหัสการวาดภาพเป็นอุปสรรคต่อประสิทธิภาพของอัตราการอัปเดต () และมันใช้ cpu 100% เพราะถ้าการนอนหลับถูกโยนทิ้งมันจะสลัดฟังก์ชันการวาดภาพ / ลอจิกออก ฉันใช้ SDL ด้วยและดูเหมือนจะไม่มีตัวเลือก vsync ฉันเคยได้ยินคำศัพท์ที่แก้ไขแล้วและเปลี่ยนแปลงเวลาได้อย่างรวดเร็ว แต่ฉันไม่แน่ใจว่าจะทำอย่างไรกับการนอนหลับ ()

2
สร้าง 2D Platformer ใน C ++ / SDL กำลังมองหาบทเรียน / ตัวอย่าง / ทรัพยากร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดเมื่อปีที่แล้ว ฉันมีประสบการณ์มากมายเกี่ยวกับ C ++ แต่ฉันไม่มีประสบการณ์กับการเขียนโปรแกรมเกม ฤดูร้อนนี้ฉันวางแผนที่จะสร้าง platformer 2D ตั้งแต่เริ่มต้นโดยใช้ C ++ / SDL สำหรับประสบการณ์การเรียนรู้ ฉันกำลังมองหาแหล่งข้อมูลให้ได้มากที่สุดเพื่อช่วยในการเริ่มต้นใช้งาน รหัสที่มาที่ดีบทเรียนอะไร หนึ่งในบทเรียนที่ดีที่สุดที่ฉันได้พบเป็นกระโดดไม่ได้ใช้งาน 'n' เรียกใช้บทเรียน dev โดยสายฟลอเรียนฮัฟสกี บทเรียนอื่น ๆ ที่คล้ายกัน?
9 c++  2d  sdl  platformer 

2
วิธีจัดการกับ OpenGL และ Fullscreen บน OS X
ฉันทำการพัฒนาบน OS X เป็นส่วนใหญ่และสำหรับโครงการเกมปัจจุบันของฉันนี่คือสภาพแวดล้อมเป้าหมายของฉัน อย่างไรก็ตามเมื่อฉันเล่นเกมฉันเล่นบน Windows ในฐานะนักเล่นเกม windows ฉันคุ้นเคยกับการเปลี่ยน Alt + Tab จากภายในเกมเป็นแอปพลิเคชันสุดท้ายที่เปิดขึ้น ใน OS XI ปัจจุบันไม่สามารถหาเกมที่รองรับได้และฉันไม่สามารถหาวิธีที่จะทำให้เป็นไปได้ โครงการปัจจุบันของฉันใช้ SDL 1.3 และฉันเห็นว่าแท็บ cmd + เป็นลำดับที่ส่งโดยตรงไปยังแอปพลิเคชันของฉันและไม่ถูกขัดขวางโดยระบบปฏิบัติการ ตอนนี้ความพยายามครั้งแรกของฉันคือการซ่อนหน้าต่างการแสดงผลบนแท็บ cmd + ซึ่งใช้งานได้อย่างแน่นอน แต่มีข้อเสียที่ไม่สามารถกู้คืนหน้าต่าง OpenGL ใน SDL ที่ซ่อนอยู่เมื่อผู้ใช้แท็บกลับไปที่แอปพลิเคชัน ก่อนอื่นไม่มีเหตุการณ์ใดเกิดขึ้นสำหรับฉันหรือฉันไม่สามารถค้นหาได้ประการที่สองปัญหาหลักคือเมื่อหน้าต่างแอปพลิเคชันนั้นถูกซ่อนเกมของฉันยังคงเป็นแอปพลิเคชั่นที่ใช้งานอยู่ นั่นเป็นเรื่องที่น่ารำคาญอย่างมาก มีแนวคิดใดที่จะประมาณพฤติกรรมของ windows / linux สำหรับแท็บ alt +
9 opengl  sdl  macos 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.