هذا سهل.
لا تفعل هذا (في المقذوف :: move ()):
xVel=0;
yVel=0;
وسوف تستمر الرصاصة في الحركة.
مشكلة أخرى هنا:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
في الأساس ، يجب ألا تفعل -=
. إما استبداله بـ yVel = -14
(ستتحرك جميع الرصاص دائمًا مع سرعة الثوابت) أو اكتشاف لحظة "مفتاح الأسفل" (لم يتم الضغط على مفتاح IE في الإطار السابق ، ويتم الضغط عليه في حالية) ، وعندها فقط تفعل ذلك -= 14
. قد يكون هذا النوع من الأشياء (اكتشاف حدث Keyup/KeyDown) أكثر بساطة إذا قمت بمعالجة الأحداث الرئيسية التي تتلقاها (في حلقةك الرئيسية) بدلاً من الاتصال SDL_GetKeyState
.