I 바인딩 및 두 개의 삼각형 내 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);
}
여기및 내가 분명히 매우 명백한 공동 실종 추첨 방법
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;
}
에서의 키를 클릭하면 스프라이트를 아래로 이동하는 코드 내 사각형이 완전히 사라하고 _x 값은 동일하게 유지됩니다. 나는 입력을 테스트했고 정확히 원하는대로 작동합니다. 사각형을 움직일 수없는 것 같습니다. 아무도 내 스프라이트를 이동하는 방법을 알아낼 수 있습니다, 감사합니다!
+1 노력하지만이 말 그대로 내 질문에 상관 없어요, 네가 무슨 일을하는지 알아 내 질문은 내 스프라이트를 이동하는 방법입니다 ... 내 입력 작동합니다. – Luke
당신이 나에게 설명했던 것에서 : "... ... 내 문제는 내가 누르면 사각형이 움직이지 않는다." "그러면 inputHandler()에 대한 논리를 보여 주었다. 말하자면, " '아래를 클릭하면 사각형이 완전히 사라지고 _x 값이 그대로 유지되며 ...'"동작은 키가 반복적으로 눌려진 것처럼 들립니다. 귀하의'Sprite :: update()'에서'0.1f'에서'0.05f'까지의 작은 값을 사용하고'_x' 변수를 수정하는 대신'_y'로 바꾸십시오. 수직으로 이동하려면 벡터의 Y 구성 요소를 늘리거나 줄입니다. –
또한이 함수를 호출하는 코드도 표시하지 않았습니다. –