Der Charakter - Multiplayer Indie Game - Gether

Der Charakter - Multiplayer Indie Game - Gether

Vorgehensweise

Bei der Realisierung eines Spielprojekts, habe ich mit der Zeit meine eigene Vorgehensweise entwickelt. Nach der groben Planung, wie ich mir das Endresultat vorstelle, fange ich an den Großteil der Grafiken zu realisieren. Gerade als 1-Mann Team, wenn man z.B aus finanziellen Gründen alles selbst machen will, ist das keine verkehrte Sache. So weiß man nämlich ob man die schwierigste Hürde überhaupt überwinden kann und ist umso motivierter, wenn man sie überwunden hat. So ist das zumindest bei mir der Fall.

Schnelle Resultate!

Das ist enorm wichtig und noch ein großer Vorteil, wenn man direkt ein paar gute Grafiken für das Spiel realisiert hat. Resultate motivieren. Gerade wenn man schon mal an größeren Projekten gearbeitet hat, weiß man dass Motivation auf Dauer zum Endgegner wird.

Motivationskiller sollten aus diesem Grund vermieden werden. Sitzt man beispielsweise 2 Wochen an einem Projekt und als sichtbares visuelles Resultat hat man nur ein perfektes Menü, obwohl man schon die halbe Spiellogik entwickelt hat, ist das sicher alles andere als motivierend.

Was ist das Entscheidende, dass wichtigste?

Bei dem Spiel, welches wir hier realisieren ist vermutlich das Wichtigste: Der Charakter. Und um diesen kümmern wir uns auch als erstes und nehmen diesen programmiertechnisch als Startpunkt. Am besten ist es sich ein paar gute Fragen im Kopf zu stellen. Was muss der Charakter können? Wie bewegt er sich? Wo kann er alles mit der Spielwelt interagieren?

Hat man sich erst einmal diese Fragen einigermaßen im Kopf beantwortet, kann man auch loslegen und das ganze realisieren.

Der Charakter

Ich habe mich am Ende für ein simples Charakter Design entschieden. Nichts besonderes. Jedoch mit einer kleinen Animation geschmückt, welche dem Spieler das Gefühl vermitteln soll, dass der Charakter zumindest etwas lebendig ist.

Für unsere Zwecke ausreichend: Ein Spielcharakter.

An dieser Stelle muss ich nochmal erwähnen, dass ich kein Pixelartist bin. Der Fokus dieses Spieleprojekts liegt auf seiner Basis und dessen Inhalt. Hauptfokus ist der kooperative Multiplayer Teil, dieser sollte aber fürs erste komplett ausgeblendet werden. Der Spielinhalt wird nämlich erst Offline realisiert und erst zum Ende kooperativ Online.

C++ und SFML

Das Spiel wird komplett mit C++ und SFML realisiert. Die Charakter Klasse sieht momentan so aus:

Vielleicht auch interessant
2D Skeleton
2D Skeleton

Die Grundlagen für 2D Skeleton Animationen.

class Character : public AniObject
{
	public:

		Character();
		
		void setHp(float hp);
		void setExp(float exp);

		float getHp();
		float getExp();

		void move(float dx, float dy);
		void move(float ft);
		bool isSolid();

		void drawGUI(sf::RenderWindow &app);

	private:

		float m_speed;
		float m_hp;
		float m_exp;
		int m_level;

		sf::RectangleShape m_hpRect, m_expRect;
};

Ich werde hier und auch später immer nur auf die wichtigsten Aspekte eingehen. AniObject beschreibt ein Spielobjekt, welches animiert werden kann. In der Klasse selbst ist sehr triviale Animationslogik zu finden. AniObject erbt außerdem von sf::Sprite.

Eine solche Klasse kann mithilfe meines Artikels "SFML 2.5 - Charakter animieren" eigenständig realisiert werden. Im Anschluss dieser Artikel Serie werde ich allerdings auch den kompletten Quelltext dieses Projekts veröffentlichen.

Interessant an dieser Stelle sind vielleicht noch die move Methoden. Die erste überschreibt die geerbte SFML Sprite move Methode. Die zweite fängt Tasteneingaben ab und arbeitet mit der Frametime um auf jedem Endgerät die selben Bewegungen zu erreichen. (SFML 2.5 - Charakter bewegen)

void Character::move(float dx, float dy)
{
	sf::Sprite::move(dx, dy);
	this->play(1);
}

void Character::move(float ft)
{
	if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
	{
		this->setRotation(0);
		this->move(-m_speed * ft, 0);
	}
	else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
	{
		this->setRotation(180);
		this->move(m_speed * ft, 0);
	}
	else if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
	{
		this->setRotation(90);
		this->move(0, -m_speed * ft);
	}
	else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
	{
		this->setRotation(-90);
		this->move(0, m_speed * ft);
	}
}
Nächster Artikel
Tiled Map - Multiplayer Indie Game - Gether
Hinterlasse gerne einen Like oder Kommentar (~‾▿‾)~
Name Text