• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Tworzenie tablicy pocisków/ Gra SDL2.0

VPS Starter Arubacloud
0 głosów
342 wizyt
pytanie zadane 17 maja 2019 w C i C++ przez libson Nowicjusz (120 p.)
zamknięte 18 maja 2019 przez libson

Cześć! Szukam pomocy przy pisaniu gry. Mam problem z utworzeniem tablicy pocisków, dla jednego, wszystko działa jak powinno. Próbowałem dojść do tego na różne sposoby ale już nie mam pomysłu sad. Dodaje fragmenty kodu klas pocisku oraz gracza:

Bullet.h

#ifndef _BULLET_H
#define _BULLET_H

class Bullet
{
private:

	SDL_Texture* bulletTexture;													// Tekstura pocisku

	Game* game;

public:

		Bullet(Game& game);									     				// Konstruktor pocisku
		bool loadFromFile(std::string);											// Ladowanie tekstury z podanej sciezki

		int GetBulletWidth() const;												// Zwraca szerowkosc pocisku
		int GetBulletHeight() const;											// Zwraca wysokosc pocisku
		bool GetIsAlive();														// Zwraca czy pocisk jest uzywany

		void Update();															// Odswiezanie pozycji pocisku
		void Fire(int StartPosX, int StartPosY, int XSpeed, int YSpeed);		// Strzal pocisku
		void Render();															// Wyswietlanie pocisku na ekranie

private:

		bool IsAlive;															// Czy pocisk jest uzywany
		int mPosbX;																// Pozycja X pocisku
		int mPosbY;																// Pozycja Y pocisku
		int mVelbX;																// Predkosc pocisku na osi X
		int mVelbY;																// Predkosc pocisku na osi Y
		int bullet_w;															// Szerokosc pocisku
		int bullet_h;															// Wysokosc pocisku


};

#endif

Bullet.cpp


Bullet::Bullet(Game& game)
{
	this->game = &game;

	std::string path = "img/bullet.png";

	IsAlive = false;
	mPosbX = 0;
	mPosbY = 0;
	mVelbX = 0;
	mVelbY = 0;

	loadFromFile(path.c_str());

}

...

void Bullet::Update()
{

		if (IsAlive)
		{
			mPosbX = mPosbX + mVelbX;
			mPosbY = mPosbY - mVelbY;
		}
		if (mPosbY < 0)
		{
			IsAlive = false;
		}

}

void Bullet::Fire(int StartPosX, int StartPosY, int XSpeed, int YSpeed)
{

		mPosbX = StartPosX;
		mPosbY = StartPosY;
		mVelbX = XSpeed;
		mVelbY = YSpeed;
		IsAlive = true;

}



void Bullet::Render()
{

		if (IsAlive)
		{
			SDL_Rect renderQuad = { mPosbX, mPosbY, bullet_w, bullet_h };
			SDL_RenderCopy(game->renderer, bulletTexture, NULL, &renderQuad);
		}

}

...

Player.h

#ifndef _PLAYER_H
#define _PLAYER_H

class Player
{
private:
	SDL_Texture* playerTexture;			// Tekstura gracza

	Game* game;

public:

	int getPlayerWidth() const;			// Zwraca szerokosc tekstury 
	int getPlayerHeight() const;		        // Zwraca wysokosc tekstury

	int player_w;						// Szerokosc tekstury
	int player_h;						// Wysokosc tekstury

	int GetPosX();						// Zwraca pozycje X gracza
	int GetPosY();						// Zwraca pozycje Y gracza

	Player(Game&, std::string);			// Konstruktor gracza

	void HandleEvent(SDL_Event& e);		// Odpowiada za uzycie klawiszy

	void move();						// Zmiana wspolrzednych gracza
	bool loadFromFile(std::string);		// Laduje obrazek z podanej sciezki
	void render();						// Wyswietla na ekranie

	static const int MAX_BULLETS = 10;
	Bullet* mBullets[MAX_BULLETS];


	~Player();							// Destruktor

private:

	int mPospX, mPospY;					// Wspolrzedne gracza
	int mVelpX, mVelpY;					// Predkosc gracza
};

#endif

Player.cpp

Player::Player(Game& game, std::string path)
{
	...

	for (int i = 0; i < MAX_BULLETS;i++)
	{
		mBullets[i] = new Bullet(game);
	}

	loadFromFile(path.c_str());
}

void Player::HandleEvent(SDL_Event& e)
{
	if (e.type == SDL_KEYDOWN && e.key.repeat == 0)
	{
		switch (e.key.keysym.sym)
		{
		...
		case SDLK_SPACE:
			for (int i = 0; i < MAX_BULLETS;i++)
			{
				mBullets[i]->Fire(GetPosX() + getPlayerWidth() / 2 - mBullets[i]->GetBulletWidth / 2, GetPosY() - getPlayerHeight() / 2 + mBullets[i]->GetBulletHeight(), 0, 7);
			}
			break;
		}
	}
...
void Player::move()
{
	...

	for (int i = 0; i < MAX_BULLETS;i++)
	{
		mBullets[i]->Update();
	}
}

...
void Player::render()
{
	SDL_Rect renderQuad = { mPospX, mPospY, player_w, player_h };
	SDL_RenderCopy(game->renderer, playerTexture, NULL, &renderQuad);

	for (int i = 0; i < MAX_BULLETS;i++)
	{
		mBullets[i]->Render();
	}
}

Problem, wyskakujący przy próbie kompilacji:
Error    C2065    'mBullets': undeclared identifier- dla każdej próby użycia tablicy.

 

Pozdrawiam

komentarz zamknięcia: Problem został rozwiązany

1 odpowiedź

+1 głos
odpowiedź 17 maja 2019 przez j23 Mędrzec (194,920 p.)

W player.h daj #include "bullet.h".

komentarz 18 maja 2019 przez libson Nowicjusz (120 p.)
Jest to moja pierwsza gra, ale aż takim laikiem z programowania nie jestem, żeby nie o tym nie pamiętać ;p, ale dzięki za odpowiedź ;).
komentarz 18 maja 2019 przez j23 Mędrzec (194,920 p.)
Ale w kodzie, który podałeś, tego nie ma, więc biorąc pod uwagę treść błędu wszystko się zgadza. Innych powodów nie widzę.
komentarz 18 maja 2019 przez libson Nowicjusz (120 p.)
Jednak jestem laikiem ;p dziękuję za pomoc :D, wpisałem #include "bullet.h" w player.cpp, ale o tym w player.h już zapomniałem. Jeszcze raz bardzo dziękuję <3

Podobne pytania

0 głosów
2 odpowiedzi 143 wizyt
0 głosów
1 odpowiedź 302 wizyt
pytanie zadane 15 lipca 2021 w C i C++ przez BartoszKX Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 108 wizyt
pytanie zadane 27 stycznia 2017 w C i C++ przez klap Początkujący (410 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...