Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Tworzenie prostej gry z wykorzystaniem SDL


filip xd

Rekomendowane odpowiedzi

Opublikowano

Witam,

 

robię swoją pierwszą grę. Ma to być samochód jadący pod prąd i omijający przeszkody. Jednak mam problem, gdyż obecnie gra raz chodzi płynnie (W sumie obecnie "gra" to tylko poruszające się tło), a raz się crashuje tak jakby po jednym "loopie" czy jak to tam się nazywa. Tak jakby raz się pętla wykonuje.

Może to być wina mojego komputera ale gdyby ktoś był tak miły i sprawdzić 10x odpalając skrypty czy wszystko działa :D

//// TO JEDEN KOD - GŁÓWNY. DO TEGO JEST DRUGI KOD (Osobny source) - FPS.cpp ///?


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

using namespace std;
#include "fps.cpp"
SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;
SDL_Rect rect1,rect2;

const Uint8 * keystate;
int main(int argc, char *argv[])
{

okno = SDL_CreateWindow("Gra",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,0);
ekran = SDL_GetWindowSurface(okno);
klasa_fps fps;

SDL_Surface * droga = IMG_Load("droga.png");

SDL_Surface * postac = IMG_Load("postac.png");

int klatka=0;

float posY=360;
float velY=0;
while(true)
{

    fps.start();
    klatka++;
    keystate = SDL_GetKeyboardState(NULL);
    while(SDL_PollEvent(&zdarzenie))
    {
        if(zdarzenie.type==SDL_QUIT)
        {
            exit(0);
        }
    }
        {//fizyka
            posY=posY+velY;

        }
    {//render

    {//tlo

    SDL_FillRect(ekran,NULL,NULL);
    }
{//droga
    for(int loop=0;loop<8;loop++)
{
    rect2.x=loop*200-(klatka*8)%200;
    rect2.y=0;
    SDL_BlitSurface(droga,NULL,ekran,&rect2);
}
}
    }
    SDL_UpdateWindowSurface(okno);
    fps.end();
}
}


KOD Nr. 2  "FPS"

#include <SDL2/SDL.h>

class klasa_fps
{
public:

int poczatek;
int koniec;
int roznica;
float delay;
int klatka=0;
int fps = 60;
void start()
{
poczatek=SDL_GetTicks();

 }
void end()
{

koniec=SDL_GetTicks();
roznica = koniec-poczatek;
delay = (1000.0/(float)fps)-roznica;
if(delay>0);

{
SDL_Delay(delay);
 }
}
 };

Za sprawdzenie samego kodu też bardzo dziękuję. Uczę się dopiero miesiąc programowania więc pewnie jest wiele błędów.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...