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

[C++][SDL]


Rekomendowane odpowiedzi

Opublikowano

Siemka zacząłem dzisiaj pisać grę (Ping pong) ale napotkałem kilka trudności a mianowicie :

-Drogę "Paletek" odbijających...

-Drogę piłeczki

 

Oto mój kod :

#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * obraz = NULL;
SDL_Surface * pale = NULL;
SDL_Event zdarzenie;
SDL_Rect PaleDestination;
Uint8 * keystate = SDL_GetKeyState( NULL );
int x;
bool wyjscie = false;
int main( int argc, char * args[] )
{
SDL_Init( SDL_INIT_EVERYTHING );
ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE );
obraz = SDL_LoadBMP( "tlo.bmp" );
pale = SDL_LoadBMP( "Paletka.bmp" );
while( !wyjscie )
{
	while( SDL_PollEvent( & zdarzenie ) )
	{
		if( zdarzenie.type == SDL_QUIT )
		{
			wyjscie = true;
		}
	}
	if( keystate[ SDLK_UP ] )
	{
		x++;
	}
 if(keystate[sDLK_DOWN])
 {
 x--;
 }
	PaleDestination.x = x;
	SDL_BlitSurface( pale, NULL, ekran, & PaleDestination );
 SDL_BlitSurface( obraz, NULL, ekran, NULL );
	SDL_Flip( obraz );
}
SDL_FreeSurface( pale );
SDL_FreeSurface( obraz );
SDL_Quit();
return 0;
}

Z tym pierwszym problemem co nie co próbowałem coś zrobić ale nie jestem w 100% pewien czy jest dobrze... :

  if( keystate[ SDLK_UP ] )
	{
		x++;
	}
 if(keystate[sDLK_DOWN])
 {
 x--;
 }

ale z tym drugim to zupełnie niewiem jak to zrobić i może w mi pomożecie ?? :)

 

Z góry dzięki :)

 

PS: Mógł by ktoś zmienić nazwę tematu z "[C++][sDL]" na "[C++][sDL]Problem z funkcjami"

bo trochę się pośpieszyłem i walnąłem FAIL'a :)

 

@DOWN

Problem mam z tym że niewiem jak "za projektować" drogę piłeczki

1379095800-U384748.png

ExMod | ExMentor | ExChampion | ExMoT | Blue Member | Tagger

Opublikowano

Temat "[C++][sDL]Problem z funkcjami" jest równie dobry jak ""[C++][sDL]Problem z C++ SDL"

 

Stwórz obiekt reprezentujący piłeczkę, wyświetlaj ją jako bitmapę ( albo kółko, w/e ).

Nadaj piłeczce wektor.

Podziel rendering na tick'i (albo frame'y, jak zwał tak zwał).

W każdym framie przesuń piłeczkę o wektor i sprawdź kolizję. Do tego musisz nadać Paletkom miejsce w przestrzeni dwuwymiarowej ( na razie obsługujesz tylko oś x ).

Jeśli piłeczka wpadnie w kolizję z paletką, odbij ją o odpowiedni kąt (wyliczany z wektora).

Jeśli nie wpadnie w kolizcję z paltką i jednoczęsnie nie będzie znajdowała się na obszarze gry - punkt, zapętlić.

Ta sygnatura jest pusta.

Weteran
Opublikowano

Jeśli piłeczka wpadnie w kolizję z paletką, odbij ją o odpowiedni kąt (wyliczany z wektora).

Jeśli chodzi kąt to:

odbicie_falii.jpg

 

hehe, niedawno miałem to na fizyce :]

Załóżmy, że piłeczka leci z następującą prędkością(per frame): +1x +2y to po odbiciu poleci +1x -2y

 

Problem mam z tym że niewiem jak "za projektować" drogę piłeczki

Cała heca w tym, że tego się nie projektuję, a programuję.

Opublikowano

@UP

Jak zwał tak zawał :D

 

PS: też niedawno miałem to na fizyce ;]

@TOP

Dzięki UP i 2UP

 

Tematu jeszcze nie zamykajcie bo może(na pewno)będę miał jakieś pytania :)

1379095800-U384748.png

ExMod | ExMentor | ExChampion | ExMoT | Blue Member | Tagger

Weteran
Opublikowano

Znak równości?

Respeeeekt.

Dzięki

Lubię kiedy ludzie okazują mi rispekt, bo wtedy czuje się lepszy.

 

//I tak nigdy nie dorównasz Osam`ie.

Opublikowano

Siemka jak mówiłem będę potrzebował jeszcze wasze pomocy :)

a mianowicie:

Skończyłem właśnie (prawie) wszystko w tym pingpongu (została mi tylko ta piłeczka...) ale nie oto chodzi zbudowałem sobie tą moją grę i wyskoczyło mi to:

1339444911-U384748.png

a oto kod:

#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * obraz = NULL;
SDL_Surface *Rakietka1=NULL;
SDL_Surface *Rakietka2 =NULL;
SDL_Rect Rakietka1Destynation;
SDL_Rect Rakietka2Destynation;
SDL_Event zdarzenie;

Uint8 * keystate = SDL_GetKeyState( NULL );
int h;
int x;

bool wyjscie = false;
int main( int argc, char * args[] )
{
SDL_Init( SDL_INIT_EVERYTHING );
ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE );
obraz = SDL_LoadBMP( "C:	ło.bmp" );
Rakietka1=SDL_LoadBMP("C:\rakietka.bmp");
Rakietka2=SDL_LoadBMP("C:\Rakietka.bmp");

while( !wyjscie )
{
	while( SDL_PollEvent( & zdarzenie ) )
	{
		if( zdarzenie.type == SDL_QUIT )
		{
			wyjscie = true;
		}
	}
   	   if( keystate[ SDLK_UP ] )
	{
		x++;
	}
		  if( keystate[ SDLK_DOWN ] )
	{
		x--;
	}
	if( keystate[ SDLK_w ] )
	{
		h++;
	}
	if(keystate[sDLK_s])
	{
	h--;
	}
	Rakietka1Destynation.h=x;
	Rakietka2Destynation.h=h;
	SDL_BlitSurface( obraz, NULL, ekran, NULL );
	SDL_Flip( obraz );
}
SDL_FreeSurface( obraz );
SDL_Quit();
return 0;
}

I tu moje pytanie :

jest coś źle napisane w kodzie czy to raczej błąd "natury technicznej"??

1379095800-U384748.png

ExMod | ExMentor | ExChampion | ExMoT | Blue Member | Tagger

Opublikowano

1. Podawaj ścieżki względne

2. Czytaj logi SDLa

3. Sprwadzaj przy każdej akcji wczytania czy zainicjalizowania czegoś w SDL czy się powiodło

Opublikowano

@UP & @2UP

 

Wszystko to co napisałeś(@UP) zrobiłem i wciąż ten sam efekt...trudno wiedz pewnie to problem "natury technicznej" tak jak napisał (@2UP)

 

Ale nie poddaje się i spróbuję napisać to z bibloteką Allegro...bo przecież SDL nie jest jedyną w swoim rodzaju :D

 

A dla was Lajki za pomoc i dobre chęci :)

 

@TOP

Temat do zamknięcia...

1379095800-U384748.png

ExMod | ExMentor | ExChampion | ExMoT | Blue Member | Tagger

Opublikowano
Wszystko to co napisałeś(@UP) zrobiłem i wciąż ten sam efekt...trudno wiedz pewnie to problem "natury technicznej" tak jak napisał (@2UP)

No więc po to mówię abyś sprawdzał czy każda inicjalizacja się powodzi i doszedł do miejsca z błędem...

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...