Page 2 of 5

Re: problēma

Posted: 15 Feb 2012, 19:53
by atis
Tas backtrace arī tev dīvains izskatās.. Tur trūkst main() funkcijas un Sprite::Draw() funkcijas.

Re: problēma

Posted: 15 Feb 2012, 19:59
by kristapuciitis
atis wrote:Tas backtrace arī tev dīvains izskatās.. Tur trūkst main() funkcijas un Sprite::Draw() funkcijas.
kāds backtrace?

Re: problēma

Posted: 15 Feb 2012, 20:22
by atis
Tas pats Call Stack, kas tev skrīnšotā redzams: CRTStartup() -> WinMain() -> SDL_UpperBlit() -> ...

Re: problēma

Posted: 15 Feb 2012, 20:50
by bubu
atis wrote:Tas backtrace arī tev dīvains izskatās.. Tur trūkst main() funkcijas un Sprite::Draw() funkcijas.
Kas vainas WinMain? Ja studijā linko ar /SUBSYSTEM:WINDOWS argumentu, tad linkeris izmanto WinMain kā programmas entry-point'u, nevis main.

Tas ka Sprite::Draw trūkst - tas gan dīvaini? Varbūt projekta Debug konfigurācijai ir ieslēgta optimizācija?

Vēl arī derētu visus rezultātus SDL funkcijām pārbaudīt, vai tās neatgriež kļūdas. Vienkāršākajā gadījumā, piemēram, izmantojot assert'us:

Code: Select all

	SDL_Surface* temporary = SDL_LoadBMP(fileName);
	assert(temporary);
	SDL_Surface* optimized = SDL_DisplayFormatAlpha(temporary);
	assert(optimized);
	SDL_FreeSurface(temporary);
	_surface = optimized;
Tāpat arī ifstream'am:

Code: Select all

	 ifstream file(fileName);
	 assert(file.is_open());
Jautājums - kurā vietā kodā tiek izsaukta Level::Load funkcija?

Re: problēma

Posted: 15 Feb 2012, 20:57
by kristapuciitis
bubu wrote: Tas ka Sprite::Draw trūkst - tas gan dīvaini? Varbūt projekta Debug konfigurācijai ir ieslēgta optimizācija?
Kur tieši tas trūkst? Un kāda optimizācija ieslēgta? I am too noob.

Re: problēma

Posted: 15 Feb 2012, 21:06
by kristapuciitis
bubu wrote: Jautājums - kurā vietā kodā tiek izsaukta Level::Load funkcija?
PlatformGmae tā vispār netiek izsaukta, bet pagaidām arī netaisos, jo programma karās pat bez tās izsaukšanas.

Re: problēma

Posted: 15 Feb 2012, 21:10
by atis
Kas vainas WinMain? Ja studijā linko ar /SUBSYSTEM:WINDOWS argumentu, tad linkeris izmanto WinMain kā programmas entry-point'u, nevis main.
Manuprāt, SDL definē savu WinMain funkciju, kas izsauc lietotāja "main" funkciju.. tas tā, lai būtu portabls risinājums.

Re: problēma

Posted: 15 Feb 2012, 21:16
by kristapuciitis
Ko jūs rakstat? o.0 Man problēma ir tā, ka programma nepalaižas pat tad, kad netiek izsaukta funkcija Level::Load(const char* fileName). Bet, ja es commentēju visu to Level::Load() funkciju, tad nekādu problēmu nav.

Re: problēma

Posted: 15 Feb 2012, 21:29
by atis
Nu hz, varētu domāt, ka tev tur ar SDL kaut kas ir salinkojies ne tā, kā vajag. Bet ar vienkāršu skatīšanos kodā un skrīnšotā neko sakarīgu nevaru pateikt. Pati proga kā tāda uz mana kompja strādā vienalga, vai ir Level::Load() vai nav.

Atrodi varbūt internetā kādu SDL piemēru ar gatavu MSVC++ projektu.

Edit: aizmirsu piebilst, ka es viņu būvēju uz MacOSX, neizmantojot visual c++ projekta failus.

Re: problēma

Posted: 15 Feb 2012, 22:34
by bubu
atis wrote:Manuprāt, SDL definē savu WinMain funkciju, kas izsauc lietotāja "main" funkciju.. tas tā, lai būtu portabls risinājums.
Jā tā ir. Es vienk domāju, ka tu brīnies, ka tur izsaucas WinMain, nevis main. Normāli šeit vajadzētu būt WinMain -> SDL_main fjas izsaukumam redzamam.
kristapuciitis wrote:Ko jūs rakstat? o.0 Man problēma ir tā, ka programma nepalaižas pat tad, kad netiek izsaukta funkcija Level::Load(const char* fileName). Bet, ja es commentēju visu to Level::Load() funkciju, tad nekādu problēmu nav.
Palaid programmu debugerī. Soli pa solim izpildi un atrodi rindiņu uz kuras viss apstājas/nokaras/utt...
Es neticu, ka aizkomentējot Level::Load, tad programma strādā. Tas nav iespējams. Jo tu nekur NEIZSAUC Level::Load metodi.