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

[Problem]SFML 2.0 NPC - Wykonywanie czynności


GGG205

Rekomendowane odpowiedzi

Opublikowano

Witam ! Zacząłem sobie robić silniczek i jest taki mały problem, kiedy tworzę obiekty o nazwie NPC, próbowałem:

 

NPC obiekt(DANE PARAMETRY); <- NPC się jednocześnie obracały w tą samą stronę i w tym samym czasie

NPC* obiekt = new NPC[1]; <- to samo co wyżej

vector<NPC> obiekt(1) <-A tu jest białe tło, nawet gdy zwiększę wartość.

 

Poniżej umieszczam obrazek, jak by jakoś mógł pomóc, oraz część kodu:

 

Screen 1:

1png_napahnq.png

Screen 2:

2png_napahew.png

KOD NPC.cpp:

void NPC::Add_NPC(RenderWindow& wnd)
{
	srand(time(NULL));
	int x = (rand() % 4);
	int y = (rand() % 4);
	NPCSpr.setTextureRect(IntRect(x * 32,y * 48,32,48));
								
	NPCSpr.setPosition(NPCPostion.x, NPCPostion.y);
	wnd.draw(NPCSpr);

}

 

KOD 2 NPC.H:

#ifndef NPC_H
#define NPC_H

class NPC
{
public:
	int NPCid;
	int NPCMoveSpeed;
	int NPCAnimationStart;
	bool NPCWalkAnime;
	string NPCPicLocal;
	Vector2i NPCPostion;


	Texture NPCTex;
	Sprite NPCSpr;


		
	NPC(int HumanX, 
		int HumanY, 
		int HumanSpeed, 
		int HumanAnimS, 
		bool HumanAnimeW,
		string NPCPict):    NPCMoveSpeed     (HumanSpeed),
	                        NPCAnimationStart(HumanAnimS),
	                        NPCWalkAnime     (HumanAnimeW),
	                        NPCPicLocal      (NPCPict){
								
								NPCid = 0;
								NPCPostion.x = HumanX;
								NPCPostion.y = HumanY;
								
								if(! NPCTex.loadFromFile(NPCPict))
									std::cout << "ERROR: Fail load image NPC" << std::endl;
								NPCSpr.setTexture(NPCTex);
								NPCid++;
								cout << NPCid;
	}

	NPC(){
		NPCid = 0;
		NPCMoveSpeed = 0;
	    NPCAnimationStart = 0;
	    NPCWalkAnime = true;
		NPCPicLocal = "Graphics\\Characters\\001-Fighter01.png";

		if(! NPCTex.loadFromFile(NPCPicLocal))
			   std::cout << "ERROR: Fail load image NPC" << std::endl;
			NPCSpr.setTexture(NPCTex);
			NPCid++;
	        cout << NPCid;
			
	}

	void Add_NPC(RenderWindow& wnd);
	void Stats_NPC();

};

#endif 

 

NPC mają takie samo id: 1, 1 i 1, a powinno być 1, 2 i 3.

Opublikowano

Bo używasz tej klasy jednocześnie jako pojedynczego NPC i grupy NPC. Tworząc następne jedynie modyfikujesz ten obiekt, nic nie dodajesz.

Masz źle zaplanowany projekt.

I ten srand raczej nie był tam zamierzony.

I dlaczego zaczynasz wszystkie nazwy zmiennych od NPC?

Opublikowano

Ok dobra, to postaram się to inaczej zaplanować. Używam NPC, bo łatwiej jest mi odróżnić co jest odczego, bo mam takie same zmienne w klasie bohaterowie. Dzięki za uwagę, jak będę miał czas to odpisze jaki postęp.

Opublikowano

Nadal nie rozumiem po co ci takie rozróżnienie skoro piszesz obiektowo.

Dodam jeszcze, że powinieneś używać dziedziczenia. Tutaj pasowała by idealnie klasa np. Entity (Byt), z której dziedziczyłbyś dla NPC, bohaterów, później też innych rzeczy, które są w pewnym sensie bytami (projectiles, particles, etc.). Dziedziczyłbyś z niej właśnie takie składowe jak położenie, prędkość, prędkość maksymalna, metody do rysowania, updatownia stanu obiektu, itd. Daje to też podstawowe możliwości jakich będziesz potrzebował do przechowywania tych wszystkich obiektów i manipulowania nimi w składny sposób (polimorfizm).

Na prawdę. Przemyśl sobie dobrze ten projekt, bo to są dosyć skomplikowane rzeczy.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...