私が結合して、二つの三角形が私Sprite.cppをint型で構成される四角形を描画するためにFBOとVBOを使用し、ここに私のinitメソッドであるSDL2 OpenGLはC++がVBOとFBO
void Sprite::init(float x, float y, float width, float height) {
_x = x;
_y = y;
_width = width;
_height = height;
if (_vboID == 0) {
glGenBuffers(1, &_vboID);
}
vertexData[0] = x + width;
vertexData[1] = y + height;
vertexData[2] = x;
vertexData[3] = y + height;
vertexData[4] = x;
vertexData[5] = y;
vertexData[6] = x + width;
vertexData[7] = y + height;
vertexData[8] = x;
vertexData[9] = y;
vertexData[10] = x + width;
vertexData[11] = y;
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
、ここでは、私ははっきりといくつかの非常に明白な共同をしないのですdrawメソッド
void Sprite::draw() {
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, 0x1406, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
です私はどこでも解決策を見つけることができないので、ncept、私の問題は私が私の四角形を押し下げるときです。 (S IはWASD移動を使用しているため)。ここで、入力ハンドラ
void InputHandler::handleInput(SDL_Event* event, Sprite *toMove) {
switch (event->type) {
case SDL_KEYDOWN:
{
if (event->key.keysym.sym == SDLK_a) {
toMove->setMovementBooleans(MovementTuples::LEFT, true);
std::cout << "Set left ";
}
if (event->key.keysym.sym == SDLK_d) {
toMove->setMovementBooleans(MovementTuples::RIGHT, true);
std::cout << "Set right ";
}
if (event->key.keysym.sym == SDLK_s) {
toMove->setMovementBooleans(MovementTuples::DOWN, true);
std::cout << "Set down ";
}
if (event->key.keysym.sym == SDLK_w) {
toMove->setMovementBooleans(MovementTuples::UP, true);
std::cout << "Set up ";
}
break;
}
case SDL_KEYUP:
{
if (event->key.keysym.sym == SDLK_a) {
toMove->setMovementBooleans(MovementTuples::LEFT, false);
}
if (event->key.keysym.sym == SDLK_d) {
toMove->setMovementBooleans(MovementTuples::RIGHT, false);
}
if (event->key.keysym.sym == SDLK_s) {
toMove->setMovementBooleans(MovementTuples::DOWN, false);
}
if (event->key.keysym.sym == SDLK_w) {
toMove->setMovementBooleans(MovementTuples::UP, false);
}
}
}
}
ためのコードは、この方法は、静的にアクセスされています。ここで私がダウンしてクリックすると、あなたが私のスプライトのcpp
void Sprite::update() {
if (movementBooleans[MovementTuples::DOWN]) {
_x -= .1f;
init(_x, _y, _width, _height);
std::cout << "Moved to: (" << _x << ", " << _y << ")"<< std::endl;
}
にSキーをクリックしたときにスプライトを下に移動するためのコードは、私の矩形が完全に消えて、で、_x値は同じままです。私は入力をテストし、正確に私がそれをしたい、私はちょうど移動する矩形を取得するように見えることはできません動作します。誰も私のスプライトを移動する方法を把握するのに役立つことができます、ありがとう!
+1は努力していますが、これは文字通り私の質問とは何の関係もありません。あなたは何をしているのですか?私の質問は私のスプライトを動かす方法です。 – Luke
あなたが私に説明していたことから: "... ...私の問題は、私が私の四角形を押し下げるときです..." "あなたはあなたの' inputHandler() 'のロジックを見せてから、 「私がクリックすると、四角形は完全に消え、_xの値は変わらず、キーが繰り返し押されているように振る舞います。あなたの 'Sprite :: update()'では、 '0.1f'から' 0.05f'までのより小さい値を使い、 '_x'変数を変更するのではなく、' _y'で置き換えてみてください。垂直方向に移動したい場合は、ベクトルのY成分を増減します。 –
これらの関数を呼び出す場所のコードも表示されていません。 –