• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ SDL2 Postać podczas ruchu się duplikuje

Konferencja JOIN! 2018
0 głosów
53 wizyt
pytanie zadane 14 września w C i C++ przez kalendarmenn Użytkownik (970 p.)

Witam!

Otóż mam problem, że gdy wciskam strzałkę w lewo postać zamiast zmiany pozycji tworzy nową w innej pozycji.

Kod:

//libraries
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>

#include <windows.h>

using namespace std;

//variables
SDL_Window* window;
SDL_Surface* screen;
SDL_Event event;

int frame=0;

//classes
class TextureManager
{
    public:

    int Xpos=0;
    int Ypos=0;
    SDL_Rect rect;
    SDL_Surface* Surface;

    TextureManager(const char* path, int x=0, int y=0)
    {
        Xpos=x;
        Ypos=y;
        Surface = IMG_Load(path);
    }
    void Refresh()
    {
        rect.x=Xpos;
        rect.y=Ypos;
        SDL_BlitScaled(Surface,NULL,screen,&rect);
        SDL_BlitSurface(Surface,NULL,screen,&rect);
    }
};

//functions
void GameLoop()
{
    while(true)
    {
       if(frame==0)
       {
           //loading textures
           TextureManager RedBall("graphic/ball.bmp", 70,70);
           while(frame==0)
           {
                //events
                while(SDL_PollEvent(&zdarzenie))
                {
                    if(zdarzenie.type==SDL_QUIT)
                    {
                        exit(0);
                    }
                }

                //controls
                if(GetAsyncKeyState(VK_LEFT))
                {
                    RedBall.Xpos=RedBall.Xpos-5;
                }

                //images
                RedBall.Refresh();

                //refreshing
                SDL_UpdateWindowSurface(window);
                SDL_Delay(16.66666666666666666666666);
           }
           SDL_FreeSurface(RedBall.Surface);
       }
    }
}

int main(int argc, char* args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);

    window = SDL_CreateWindow("Red ball jump", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,800,600,NULL);
    screen=SDL_GetWindowSurface(window);

    GameLoop();

    return 0;
}

Z góry dziękuję za pomoc!

komentarz 15 września przez Criss VIP (147,500 p.)
Nie czyścisz ekranu

1 odpowiedź

0 głosów
odpowiedź 15 września przez j23 Maniak (70,200 p.)
Zapewne musisz zamalować postać na starej pozycji tłem i dopiero potem malować na nowej pozycji.

Podobne pytania

0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 26 października 2016 w C i C++ przez neos Początkujący (320 p.)
0 głosów
2 odpowiedzi 69 wizyt
0 głosów
0 odpowiedzi 43 wizyt
pytanie zadane 27 stycznia 2017 w C i C++ przez klap Początkujący (410 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

55,136 zapytań

99,354 odpowiedzi

204,340 komentarzy

27,138 pasjonatów

Przeglądających: 391
Pasjonatów: 24 Gości: 367

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...