Hejo! Do programowania używam CodeBlocks i SDL. Pokazuje mi błąd w linijce 53 w funkcje.cpp i nie mam pojęcia jak się go pozbyc. Każda pomoc mile widziana. To nie jest ważny probram ale im wcześniej to zrozumiem tym lepiej :d.
Tresc błędu : C:\Users\(....)\funkcje.cpp|53|error: cannot convert 'SDL_Surface' to 'SDL_Surface*' for argument '1' to 'int SDL_UpperBlit(SDL_Surface*, const SDL_Rect*, SDL_Surface*, SDL_Rect*)'|
Tu jest kod:
MainClass.cpp :
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <windows.h>
#include <iostream>
#include "funkcje.h"
using namespace std;
//Wartosci określone
int window_width = 500,window_height = 500;
int scena = 0;
//nieokreślone
SDL_Window *window = nullptr;
SDL_Surface *screen = nullptr;
SDL_Surface *tlo = nullptr;
SDL_Event event;
SDL_Rect rect1;
Fps_klasa fps;
SDL_Surface *prob = IMG_Load("img/gracz.bmp");
Gracz proba = SetPlayer(200,200,100,100,100,prob);
int main(int argc, char*args[])
{
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("ShootingUp",500,500,window_width,window_height,0);
screen = SDL_GetWindowSurface(window);
while(true){
if (scena == 0){//Scena 1 Inicjacja
tlo = IMG_Load("img/tlo.bmp");
while(scena == 0){//Scena 1 Step Event
fps.start();
while(SDL_PollEvent(&event)){
if (event.type == SDL_QUIT){
return 0;
}
}
//Render
rect1.x = 0;
rect1.y = 0;
SDL_BlitSurface(tlo,NULL,screen,&rect1);
//render proba
proba.GraczStepEvent(screen);
SDL_UpdateWindowSurface(window);
fps.koniec(60);
}
}
if (scena == 1){
while(scena == 1){//Scena 2
}
}
}
return 0;
}
funkcje.h :
#include <time.h>
#include <SDL2/SDL.h>
class Fps_klasa{
private:
int fps_poczatek, fps_koniec, roznica, fps;
float delay;
public:
void start(); // sprawdz aktualny czas
void koniec(int fps); //sprawdz roznice miedzy klatkami (kontorola fps)
};
class Gracz{
private:
int b_max_health, b_attack_spd, b_move_spd; //bazowe statystyki
int PosX, PosY, health, max_health, attack_spd, move_spd; // aktualne statystyki
bool inv, on;// niewrażliwosc,włączony
SDL_Rect rect1;// kwadrat do rysowania spritu
SDL_Surface sprite; //sprite
public:
Gracz(int,int,int,int,int,SDL_Surface*); // "Jakby konstruktor"
int GetHealth(); //zwraca zdrowie
bool Collision(); // zderzenie z pociskami i przeciwnikami
void Shoot(); // strzela
void CheckKeyBoard(); //sprawdza poroszanie, strzelanie itd.
void Destroy(); //Zniszcz
void ChangeHealth(int); //zmien zdrowie
void SetSprite(SDL_Surface*); //ustawianie sprita
void GraczStepEvent(SDL_Surface); // GameMaker Step Event
};
Gracz SetPlayer(int,int,int,int,int,SDL_Surface*); //pojaw gracza(w miejsce funkcji pojawaia się klasa gracz)
funkcje.cpp :
#include <time.h>
#include <SDL2/SDL.h>
#include "funkcje.h"
void Fps_klasa::start(){
fps_poczatek = clock();
}
void Fps_klasa::koniec(int fps){
fps_koniec = clock();
roznica = fps_koniec-fps_poczatek;
delay = (1000.0/fps)-roznica;
if(delay > 0){
SDL_Delay(delay);
}
}
//Gracz
int Gracz::GetHealth(){//zwraca zdrowie
return health;
}
bool Gracz::Collision(){// zderzenie z pociskami i przeciwnikami;
return true;
}
Gracz::Gracz(int _PosX,int _PosY,int _b_max_health,int _b_attack_spd,int _b_move_spd,SDL_Surface *spr){// "Jakby konstruktor"
PosX = _PosX;
PosY = _PosY;
b_max_health = _b_max_health;
b_attack_spd = _b_attack_spd;
b_move_spd = _b_move_spd;
sprite = *spr;
}
void Gracz::Shoot(){// strzela
;
}
void Gracz::CheckKeyBoard(){//sprawdza poroszanie, strzelanie itd.
;
}
void Gracz::Destroy(){//Zniszcz
;
}
void Gracz::ChangeHealth(int h){//zmien zdrowie
;
}
void Gracz::SetSprite(SDL_Surface *spr){//ustawianie sprita
sprite = *spr;
}
void Gracz::GraczStepEvent(SDL_Surface *scr){
rect1.x = PosX;
rect1.y = PosY;
SDL_BlitSurface(sprite,NULL,*scr,&rect1);
}
Gracz SetPlayer(int _PosX,int _PosY,int _b_max_health,int _b_attack_spd,int _b_move_spd,SDL_Surface *spr){//pojaw gracza(w miejsce funkcji pojawaia się klasa gracz)
Gracz bob(_PosX,_PosY,_b_max_health,_b_attack_spd,_b_move_spd,spr);
return bob;
}
Nie wiem o co robie źle :<