我偶然发现了一个问题,当我通过使用箭头键移动我的精灵时 - 它只会向上或向左移动但是当我试图将他向右或向下移动时,它根本不会移动。
我试过在事件循环中替换:“SDLK_RIGHT:”与SDLK_LEFT情况相同,现在当它确实有效并且工作正常时,自代码说出来之后仍然会继续运动,但是很快当我试图删除负数时它不会移动。
我所知道浮标也应该接受正值:/
方法代码:
// Updates the sprites position in the game
void Sprite::tick( SDL_Event event )
{
if( event.type == SDL_KEYDOWN )
{
switch( event.key.keysym.sym )
{
case SDLK_LEFT:
{
velocityX = -0.1f;
break;
}
case SDLK_RIGHT:
{
velocityX = 0.5f;
break;
}
case SDLK_UP:
{
velocityY = -0.1f;
break;
}
case SDLK_DOWN:
{
velocityY = 0.5f;
break;
}
}
}
else if( event.type == SDL_KEYUP )
{
switch (event.key.keysym.sym)
{
case SDLK_LEFT: velocityX = 0.0f; break;
case SDLK_RIGHT: velocityX = 0.0f; break;
case SDLK_UP: velocityY = 0.0f; break;
case SDLK_DOWN: velocityY = 0.0f; break;
default: break;
}
}
if(alive)
{
setBoundingbox(x_pos, y_pos, width, height);
// if( inMidAir )
// {
// velocityX += 0.1f;
//}
x_pos += velocityX;
if( ( x_pos < 0 ) || ( x_pos + width > 870 ))
{
x_pos -= velocityX;
}
y_pos += velocityY;
if( ( y_pos < 0 ) || ( y_pos + height > 480 ) )
{
y_pos -= velocityY;
}
}// End of alive statement
}
和事件循环:
// Game loop
while( quit == false )
{
while( SDL_PollEvent( &event ))
{
player.tick( event );
if( event.type == SDL_QUIT )
{
quit = true;
}
}
applySurface(0, 0, background, screen);
applySurface(player.get_xpos(), player.get_ypos(),
player.get_Surface(), screen);
SDL_Flip(screen);
}
我希望有人能够理解为什么我不能按我的意愿移动
答案 0 :(得分:2)
如果您的x_pos
和y_pos
是整数,那么从它们中减去一个小float
(偶数0.1f
)大致相当于减去1,因为截断为int
有效地向下舍入。
也就是说,如果x_pos
等于100,那么100 - 0.1f
将评估为99.9f
,但会被99
截断为int
。
但是,当您尝试向右移动时,您的100 + 0.5f
评估为100.5f
,但会被100
截断回int
。< / p>
这就是为什么你可以向上和向左移动(两个坐标都减少),但不能向下或向右移动(增加坐标)。
您需要使您的类型保持一致。