문제

우주 사수를 작업 중이며 우주 막대를 해제 한 후 총알이 화면 끝까지 계속 발사하는 방법을 알 수 없습니다. 현재로서는 공간 바를 누르면 촬영됩니다. 방출하면 총알이 떼어내는 곳에 머무 릅니다. 다음은 main ()에서 순서대로 호출되는 수업입니다.

class Projectile : public Character
{
private:
    float xVel;
    float yVel;
    float x;
    float y;

public:
    void init();
    void keys();
    void move();
    void show();

}bullet;

void Projectile::init()
{
    x=315;
    y=305;
    xVel=0;
    yVel=0;
}

void Projectile::keys()
{
    bool shoot = true;
    Uint8 *keystates = SDL_GetKeyState( NULL );
    if(keystates[SDLK_SPACE])
    {             
        yVel-=14;             
    }
}

void Projectile::move()
{
    x=x+xVel;
    y=y+yVel;
    xVel=0;
    yVel=0;
    if(y<0)
    {
        x=charx;
        y=chary;              
    }
}

void Projectile::show()
{
    apply_surface(x-5,y-2,jizz,screen);
    cout << y << endl;
}
도움이 되었습니까?

해결책

쉽습니다.

이 작업을 수행하지 마십시오 (발사체 :: move ()) :

xVel=0;
yVel=0;

그리고 총알은 계속 움직일 것입니다.

또 다른 문제는 다음과 같습니다.

if(keystates[SDLK_SPACE])
{             
    yVel-=14;             
}

기본적으로, 당신은하지 말아야합니다 -=. 그것을 교체하십시오 yVel = -14 (모든 총알은 항상 상수 속도로 움직입니다) 또는 "키 다운"모멘트를 감지합니다 (즉, 이전 프레임에서는 키가 누르지 않았으며 현재 프레임으로 누르면). -= 14. 이런 종류의 일 (KeyUp/KeyDown 이벤트 감지)이 호출하는 대신받는 주요 이벤트 (메인 루프)를 처리하는 경우 더 간단 할 수 있습니다. SDL_GetKeyState.

다른 팁

xVel=0;
yVel=0;

이동 방법에서 X 및 Y 좌표를 변경 한 다음 속도를 0으로 다시 설정합니다. 이것이 총알이 움직이지 않는 이유입니다. 당신이 공간을 압박하는 동안 당신은 y-leocity에서 지속적으로 14를 빼고 있습니다. 속도를 0으로 재설정하고 싶지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top