problēma

Vēlies radīt spēli, bet nezini ar ko sākt? Sperot pirmos soļus, vari meklēt padomu šeit
Message
Author
User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

problēma

#1 Post by kristapuciitis » 14 Feb 2012, 23:52

Sveiki!
Man ir problēma- gandrīz vai katrā tutoriālī rāda, ka failu vajag atvērt ar ifstream fin(fileName); . Es daru tieši tā pat, bet man notiek kļūda- viss nokompilējas bez error, bet pati spēle nepalaižas. =( Ja aizkomentē visu to funkciju, kura nolasa datus no faila, tad errora nav, bet ja atkomentē tieši ifstream file(fileName); , tad notiek kļūda, ka spēle nepalaižas. Kur var būt problēma? Tā funkcija atrodas Level.cpp failā.
Attachments
PlatformGmae.rar
(8.56 KiB) Downloaded 470 times
Gooby pls

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: problēma

#2 Post by bubu » 15 Feb 2012, 00:12

A debugeris ko saka?
C stila stringus btw labāk ir padot kā const char* tipu, nevis char*

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#3 Post by atis » 15 Feb 2012, 13:12

Nokompilēju, palaidu, viss strādā. Vienīgā lieta: tu nepārbaudi, vai fails vispār ir atvēries. Jo, ja fails neatveras, tad viņš ieiet mūžīgā ciklā. Šitais nosacījums

Code: Select all

while (!file.eof())
vienmēr ir patiess. Drošvien faila nosaukumā vai ceļā ir kļūda tavā gadījumā.

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#4 Post by kristapuciitis » 15 Feb 2012, 13:55

Tad sanāk, ka, ja es c++ lieku atvērt failu, ja tāda faila nav, tad kods ieciklosies arī tad, ja funkcija nav nereizes izsaukta?
Gooby pls

Tenjou
Posts: 34
Joined: 23 Dec 2010, 10:33

Re: problēma

#5 Post by Tenjou » 15 Feb 2012, 14:58

Kā, Tev, jau teica, prims lieto ir jāparbauda vai fails eksistē. Vienkāršakais kā to darīt:

Code: Select all

if(file.is_open() == false) {
  // fails nav atvērts kāda iemesla pēc
}

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#6 Post by atis » 15 Feb 2012, 15:06

kristapuciitis wrote:Tad sanāk, ka, ja es c++ lieku atvērt failu, ja tāda faila nav, tad kods ieciklosies arī tad, ja funkcija nav nereizes izsaukta?
Nē, tā tas nebūs.
Tavā dotajā kodā funkcija Level::Load() netika izsaukta un viss strādāja.

Tad es iekš main() pieliku:

Code: Select all

Level *lvl = new Level();
lvl->Load("kaut_kads_fails");
Un tad arī viss bija OK, izņemot gadījumu, ja tāds fails neeksistēja -- tad proga uzkārās.

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#7 Post by kristapuciitis » 15 Feb 2012, 16:59

Man nestrādā pat, ja funkcija netiek izsaukta. Ja pat tajā funkcijā paliek tikai

Code: Select all

	 ifstream file(fileName);
	 if (!file.is_open())
		 return;
Vienalga nokarās.
Attachments
Bez nosaukuma.png
Bez nosaukuma.png (245.29 KiB) Viewed 15310 times
Gooby pls

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#8 Post by kristapuciitis » 15 Feb 2012, 18:39

Tenjou wrote:Kā, Tev, jau teica, prims lieto ir jāparbauda vai fails eksistē. Vienkāršakais kā to darīt:

Code: Select all

if(file.is_open() == false) {
  // fails nav atvērts kāda iemesla pēc
}
emm, tā funkcija nemaz netiek izsauka un faila nosaukums netika norādīts, bet programma vienalga nokarās tieši tā ifstream file(fileName). =(
Gooby pls

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#9 Post by atis » 15 Feb 2012, 19:14

No tava skrīnšota redzams, ka nokrašo SDL blitošanas funkcijā.

Tad nu ielūrēsim šeit:

Code: Select all

void Sprite::Draw(SDL_Surface* destination, int x, int y)
{
        SDL_Rect pos;
        pos.x = x;
        pos.y = y;
        SDL_BlitSurface(_surface, NULL, destination, &pos);
};
Izskatās, ka SDL_Rect struktūrai tu atstāj neinicializētus mainīgos w un h. Attiecīgi viņš paķer to, kas atradās pirms brīža uz steka.. Pieļauju, ka, ja tas ir kaut kas galīgi garām, tad SDL_BlitSurface() varētu arī nokrašot. Vismaz tas izskaidrotu, kāpēc kaut kāda automātiskā variabļa eksistence/neeksistence (ifstream file) var izmainīt uzvedību.

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#10 Post by kristapuciitis » 15 Feb 2012, 19:29

Tas neko nedod, saliku w un h pa nullēm, vienalga nokarās. Sataisīju jaunu projektu:

Code: Select all

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Level
{
public:
	void Load(const char* fileName);
};

void Level::Load(const char* fileName)
{
	 std::ifstream file(fileName);
	 string buffer;
	 int iLine = 0;
	 while (!file.eof())
	 {
		 getline(file, buffer);
	 }
};

void main()
{
	Level level;
	level.Load("file");
}
At least šī palaižas. Kaut kāds tāds brīnums ar C++ man nebija noticis :/
Gooby pls

Post Reply

Return to “Iesācējiem / For beginners”