Problem so SDL – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problem so SDL – C / C++ – Fórum – Programujte.comProblem so SDL – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #1
-
0
-

Zdar,
myslim ze som spravil viac-menej vsetko ako v seriali SDL ale nech sa snazim vykreslit cokolvek(pixel, bmp), nic sa nevykresli. Ostane len cierne SDL okno. Tu je kod pre vykreslenie bitmapy(ktory nefunguje):

#include "SDL/SDL.h"  

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;

SDL_Surface *screen;
SDL_Surface *image;

#include "data/func.cpp"

void DrawScene(){
DrawIMG(image, 0, 0);
SDL_Flip(screen);
}

int main(int argc, char *argv[]){
if(SDL_Init(SDL_INIT_VIDEO) < 0){
cout << "Could not initialize SDL: " << SDL_GetError();
getch();
exit(1);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);

if (screen == NULL){
cout << "Could not initialize screen: " << SDL_GetError();
getch();
exit(1);
}
cout << "text"; //tento text sa ani nezobrazi v cmd okne

bool done=false;
while(done == false){
SDL_Event event;
while( SDL_PollEvent(&event) ){
if( event.type == SDL_QUIT ) done=true;
}
}
DrawScene();
}

func.cpp
void LoadImages(){   

image = SDL_LoadBMP("/data/images/noimg.bmp");
}

void DrawIMG(SDL_Surface *img, int x, int y){
SDL_Rect rect;
rect.x = x;
rect.y = y;
SDL_BlitSurface(img, NULL, screen, &rect);
}

Nahlásit jako SPAM
IP: 85.135.150.–
Reklama
Reklama
sputnikone+1
Věrný člen
19. 9. 2009   #2
-
0
-

func.cpp je co?

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #3
-
0
-

moj prispevok, poslednych 10 riadkov :smile1:

Nahlásit jako SPAM
IP: 85.135.150.–
sputnikone+1
Věrný člen
19. 9. 2009   #4
-
0
-

pokud je to hlavičkový soubor, tak musíš vytvořit func.h soubor a ten includovat

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #5
-
0
-

Tak som skusil obsah func.cpp dat namiesto #include "data/func.cpp" a stale je to to iste

Nahlásit jako SPAM
IP: 85.135.150.–
sputnikone+1
Věrný člen
19. 9. 2009   #6
-
0
-

a tu promennou image a fci LoadImages() pouzivas kde

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #7
-
0
-

S tym LoadImages() mas pravdu, nepouzival som to. Takze som dopisal LoadImages(); pred hlavny cyklus ale stale nic.
P.S.: premenna images sa pouziva v LoadImages(), a DrawScene().

Nahlásit jako SPAM
IP: 85.135.150.–
sputnikone+1
Věrný člen
19. 9. 2009   #8
-
0
-

a co takhle

#include "SDL/SDL.h"

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;

SDL_Surface *LoadImages(){
SDL_Surface *image;
image = SDL_LoadBMP("/data/images/noimg.bmp");
return image;
}

void DrawIMG(SDL_Surface *img, int x, int y, SDL_Surface *s){
SDL_Rect rect;
rect.x = x;
rect.y = y;
SDL_BlitSurface(img, NULL, s, &rect);
}

void DrawScene(SDL_Surface *img, SDL_Surface *s){
DrawIMG(img, 0, 0, s);
SDL_Flip(s);
}

int main(int argc, char *argv[]){
SDL_Surface *screen;
SDL_Surface *image;
if(SDL_Init(SDL_INIT_VIDEO) < 0){
cout << "Could not initialize SDL: " << SDL_GetError();
getch();
exit(1);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);

if (screen == NULL){
cout << "Could not initialize screen: " << SDL_GetError();
getch();
exit(1);
}

image = LoadImages();
DrawScene(image, screen);

bool done=false;
while(done == false){
SDL_Event event;
while( SDL_PollEvent(&event) ){
if( event.type == SDL_QUIT ) done=true;
}
}
}

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #9
-
0
-

skusil som, stale mam len cierne(prazdne) SDL okno

Nahlásit jako SPAM
IP: 85.135.150.–
KIIV+42
God of flame
19. 9. 2009   #10
-
0
-

a ses vubec na linuxu? kdyz davas /data/...

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
sputnikone+1
Věrný člen
19. 9. 2009   #11
-
0
-

taky pravda :smile4: já jsem tam tisknul svůj vlastní obrázek... a vlinuxu asi není - windows.h

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #12
-
0
-

Som na windowse. Data je adresar ktory je v rovnakom adresary ako .exe takze mi pride logicke dat pred neho /. Ale skusil som to dat bez toho / pred data a tiez to nejde.

Nahlásit jako SPAM
IP: 85.135.150.–
KIIV+42
God of flame
19. 9. 2009   #13
-
0
-

To entity : jeste mozna otestovat misto / dat \\ ale s tim asi problem nebude

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #14
-
0
-

ano, aj to som skusil - nepomohlo

Nahlásit jako SPAM
IP: 85.135.150.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #15
-
0
-

Uz to ide - aj ked nerozumiem preco. Tu cast s cyklom som zmenil na

LoadImages();

DrawScene();

bool done=false;
while(done == false){
SDL_Event event;
while( SDL_PollEvent(&event) ){
if( event.type == SDL_QUIT ) done=true;
}
}
DrawScene();
}

teda som pridal este jedno DrawScene() pred cyklus. :smile19:

Nahlásit jako SPAM
IP: 85.135.150.–
sputnikone+1
Věrný člen
19. 9. 2009   #16
-
0
-

./data/images/noimg.bmp
tu fci za cyklem muzes smazat

Nahlásit jako SPAM
IP: 89.176.157.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #17
-
0
-

Ale ked odstranim DrawScene() z cyklu tak sa to vykresli aj tak - asi bude nejaky problem v cykle
ospravedlnujem sa za doublepost

Nahlásit jako SPAM
IP: 85.135.150.–
entity
~ Anonymní uživatel
64 příspěvků
19. 9. 2009   #18
-
0
-

Tak uz som to nasiel - DrawScene() nebolo vovnutri cyklu. Blba chyba co :smile18:

Nahlásit jako SPAM
IP: 85.135.150.–
entity0
Newbie
29. 9. 2009   #19
-
0
-

Nebudem zakladat nove vlakno ale hodim to sem:



Uint8 getpixelred(SDL_Surface* surface, int x, int y)
{
Uint32 *pixels = (Uint32 *)surface->pixels;
Uint8 r, g, b;
SDL_PixelFormat *fmt;
fmt=surface->format;
SDL_GetRGB(pixels[(y* surface->w ) + x], fmt, &r, &g, &b);
return r;
}

struct object
{
bool is;
int x;
int y;
float speedx;
float speedy;
};

object ball =
{
true,
600-20,
200,
0,
0
};

if( (getpixelred(s_bckground, int(ball.x+ ball.speedx), int(ball.y+ ball.speedy))
||getpixelred(s_bckground, int(ball.x+ ball.speedx+ 40), int(ball.y+ ball.speedy+ 40)) )== 59){
ball.speedx = 0- ball.speedx;
ball.speedy = 0- ball.speedy;
}


Problem je, ze tato podmienka ked by mala byt pravdiva tak nie je. Mala by byt pravdiva ked je na pozadi pixel s red hodnotou 59.

Nahlásit jako SPAM
IP: 85.135.148.–
"long long long is too long" - MinGW
sputnikone+1
Věrný člen
30. 9. 2009   #20
-
0
-

máš tam OR, takže výsledek asi nebude zrovna rovný 59

Nahlásit jako SPAM
IP: 147.251.53.–
entity0
Newbie
30. 9. 2009   #21
-
0
-

Okej, takze som to spravil takto



Uint8 r1,r2;

r1= getpixelred(s_bckground, int(ball.x)- 1, int(ball.y)- 1);
r2= getpixelred(s_bckground, int(ball.x)+ 41, int(ball.y)+ 41);

if(r1== 59){
ball.speedx = 0- ball.speedx* CRASH;
ball.speedy = 0- ball.speedy* CRASH;
}
if(r2== 59){
ball.speedx = 0- ball.speedx* CRASH;
ball.speedy = 0- ball.speedy* CRASH;
}


Teraz su podmienky pravdive vtedy ked by byt nemali a ked by mali byt pravdive tak nie su

Prikladam este bitmapu na ktorej to skusam.

Nahlásit jako SPAM
IP: 85.135.233.–
"long long long is too long" - MinGW
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 118 hostů

Podobná vlákna

Problem s SDL — založil Milan

Problem s SDL — založil yaqwsx

Problém s SDL — založil Systém

SDL problém — založil newbie

SDL build problem — založil zvyshok

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý