I eine Fbo und VBO verwendet zu binden und ein Rechteck zu zeichnen meine Sprite.cpp bestehend aus zwei Dreiecke int, hier ist meine Methode InitSDL2 OpenGL ++ C ein Sprite gezeichnet mit VBO und FBO beweglichen
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);
}
und hier ist das Streck-Verfahren
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);
}
ich klar einig sehr offensichtlich co bin fehle ncept, weil ich nirgends die Lösung finden kann, ist mein Problem, wenn ich s drücke, bewegt sich mein Rechteck nicht nach unten. (S, weil ich WASD Bewegung bin mit) Hier ist der Code für den Eingang Handler
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);
}
}
}
}
Diese Methode ist statisch zugegriffen. Hier ist der Code für die Bewegung des Sprite nach unten, wenn Sie die Taste s in meinem Sprite cpp klicken
void Sprite::update() {
if (movementBooleans[MovementTuples::DOWN]) {
_x -= .1f;
init(_x, _y, _width, _height);
std::cout << "Moved to: (" << _x << ", " << _y << ")"<< std::endl;
}
Wenn ich auf dich, mein Rechteck vollständig verschwinden und die _x Wert bleibt gleich. Ich habe die Eingabe getestet und es funktioniert genau so, wie ich es möchte, ich kann das Rechteck nicht bewegen. Kann mir jemand helfen, meinen Sprite zu bewegen, danke!
+1 für die Mühe, aber das hat buchstäblich nichts mit meiner Frage zu tun, ja, ich verstehe, was Sie tun, aber meine Frage ist, wie ich mein Sprite bewegen ... meine Eingabe funktioniert. – Luke
Von dem, was du mir beschrieben hast: "' ..., mein Problem ist, wenn ich s drücke, mein Rechteck sich nicht nach unten bewegt. ... "" dann hast du deine Logik für deinen 'inputHandler()' gezeigt, dann gehst du weiter Sagen wir: "Wenn ich herunterklicke, verschwindet mein Rechteck vollständig und der _x-Wert bleibt gleich; ..." "und das Verhalten klingt, als ob die Taste wiederholt gedrückt wird. Versuchen Sie in Ihrem 'Sprite :: update()', einen kleineren Wert von '0.1f' zu' 0.05f' zu verwenden und ersetzen Sie statt '_x' die Variable durch' _y'. Wenn Sie es vertikal verschieben möchten, vergrößern und verkleinern Sie die Y-Komponente Ihres Vektors. –
Sie haben auch nicht den Code angezeigt, in dem Sie diese Funktionen aufrufen. –