SDLを使用してC++でPongクローンを作成しようとしています。基本的に、レンダリングと更新を処理する単純なエンジンを作成しました
void Player::update(Uint32 ticks, SDL_Event *event, Uint8 *keys)
{
if(keys[SDLK_UP])
{
if(m_bounds.y > 0)
m_bounds.y -= 2.0f * (ticks / 1000.0f);
}
else if(keys[SDLK_DOWN])
{
if(m_bounds.y < (windowInfo.getHeight() - m_bounds.h))
m_bounds.y += 2.0f * (ticks / 1000.0f);
}
}
問題は、UPキーを押すとすべてがチャームのように機能するのに、DOWNキーを押すとまったく機能しないということです。私はすべてを試しましたが、数時間後、ティックを削除して2.0fだけを追加すると機能することに気付きましたが、UPキーの条件は、追加する以外はまったく同じに見えるため、理由はわかりません。差し引く代わりに。私はこの問題に数時間対処しようとしてきましたが、まだ解決していません。何が悪いのか分かりますか?
完全を期すために、Player :: update関数を呼び出すコードを添付しているので、もう少し詳しく知ることができます。
void Engine::update()
{
++m_numOfFrames;
m_elapsedTime = SDL_GetTicks() - m_startTime;
while(SDL_PollEvent(&m_event))
{
if(m_event.type == SDL_QUIT)
{
m_isRunning = false;
}
}
if(m_keys[SDLK_ESCAPE])
{
m_isRunning = false;
}
for(Entity *entity : m_entities)
{
entity->update(m_elapsedTime, &m_event, m_keys);
}
m_startTime = SDL_GetTicks();
SDL_PumpEvents();
}
編集:すべての値を確認するためにコードを少し編集しました。コードは次のようになります。
if(keys[SDLK_UP])
{
if(m_bounds.y > 0)
{
m_bounds.y -= 2.0f * (ticks / 1000.0f);
std::cout << 2.0f * (ticks / 1000.0f) << " value of Y:" << m_bounds.y << std::endl;
}
}
else if(keys[SDLK_DOWN])
{
if(m_bounds.y < (windowInfo.getHeight() - m_bounds.h))
{
m_bounds.y += 2.0f * (ticks / 1000.0f);
std::cout << 2.0f * (ticks / 1000.0f) << " value of Y:" << m_bounds.y << std::endl;
}
}
コンソールでの結果は、DOWN条件を除いて、どちらもほぼ同じです。の値m_bounds.y
はまったく変更されません。1行上に追加されていますが、常に同じです。エラーは次の行にある必要があります。
m_bounds.y += 2.0f * (ticks / 1000.0f);