Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.04.2011, 16:53

[Planung] kleines Adventure im Zeldastyle (XNA/C#)

Hallo,

da die Ferien ja noch ein bisschen laufen, wollte ich meine Zeit noch nutzen, ein kleines Spiel anzufangen.
Mit XNA, hatte ich bisweilen nur in diesen Tutorials zutun Moontaxi & XNAmag.
Die Tutorials sind zwar sehr gut und einfach, nur finde ich gehen sie zu wenig in den Aufbau bzw. in die Struktur eines Spieles ein.
Es werden halt keine Klassen , welche für die Steuerung, Charaktere, Umgebung etc. verantwortlich sind erstellt, es findet fast alles prozedural in Game1 statt.
Das ist es, was mich noch ein bisschen unsicher bei der Sache macht, dies soll aber jetzt erst einmal kein Beinbruch sein.

Deswegen bräuchte ich vielleicht ein paar Planungstipps bzw. Hilfen.

[Idee]

Gedacht, hatte ich mir ein kleines Adventure, vergleichbar mit Zelda für den NES.
In meiner Variante, wäre ersteinmal eine Map, ein Held und ein Monsternpc, sowie vielleicht noch ein ansprechbarer NPC.
Man soll das Monster besiegen können.

Animiert werden die Sprites denke ich mal nicht sein, ich werde es wohl so versuchen, dass nur beim Schlagen in die Schlagrichtung, ein Schwert erscheint.


[Planung]

Ersteinmal das Grundlegende, die Map.
Da würde ich, stur nach diesem Artikel vorgehen.

Klassen:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
--------------
Charakter
--------------
-Leben :int
-PosX   :int
-PosY   :int
--------------
-Update()
-Draw()

--------------
 Held:Charakter
--------------
-Name :String
--------------


--------------
 Gegner:Charakter
--------------
--------------


--------------
Items
--------------
-Name : String
--------------
-Update()
-Draw()


--------------
Schwert:Items
--------------
-Schaden: int
--------------


--------------
Steuerung
--------------
--------------


Das ist eben so meine Spontanplanung gewesen. Bei einigen Dingen bin ich mir noch nicht sicher, ob noch was hinzufügen soll. Für den Schwertkampf bräuchte ich ja noch etwas um abzufragen ob der Gegner dort ist oder nicht.

Für Vorschlage, Tipps aller Art bin ich offen und würde mich freuen, wenn ihr mir sagen könntet, was ich dringend noch beachten sollte etc.


Grüße,

kbyte

Union_Freedom

Treue Seele

Beiträge: 156

Wohnort: Nähe Hannover

Beruf: Student

  • Private Nachricht senden

2

27.04.2011, 17:07

Hey

So ein kleines Spielchen wollte ich auch mal eben mit XNA machen. So.

Jetzt kommt es stark drauf an, ob du noch eine zusätzliche Engine bzw. Framework verwendest oder ob dich mit "reinem Xna" arbeitest. Ich habe es mit reinem versucht zu realisieren und arbeite mitlerweile seid letztem Sommer an dem Projekt. Naja es kommen immer viele Sachen dazu die man zunächst garnicht beachtet.

Wo wird das Level bzw. die Map gespeichert und gerendert? Wie sieht es mit der Kollision aus? Und vorallem kommen nachher gewaltige Sachen dazu wie GUI oder anderes. Das alles so selber zu schreiben, sprengt locker die Zeit von einer-vier Wochen. Es kommt drauf an wie umfangreich alles werden soll.

Was ich dir jetzt raten würde : Fang erstmal an mit einer Welt-Klasse und einer Object-Klasse und taste dich langsam ran, was du alles brauchst. Wenn du festgestellt hast, dass keine neuen Elemente mehr benötigt werden, kannst du dich um den Rest kümmern. Denk immer dran:

Ein Objekt braucht : Textur, evlt. Animation, Position, evtl Shader-Effekt, zugehörige Welt, Kollision (Rechteck vlt.) und anders noch. Das wächst und wächst immer. Ich denke auf diese Weise entsteht ein guter Lerneffekt.

mfg
Union_Freedom
Coder bei: http://crushing-gods.de/ (Folgt uns)
Erste Eindrücke zu Crushing Gods Link

3

27.04.2011, 17:38

Hi,

Es war so gedacht, alles erstmal rein über XNA aufzubauen ohne eine Engine, die es mir schon abnimmt.
Ich hatte schon überlegt eine vorhandene Engine zu benutzen, nur bin ich mir nicht sicher welche Engine und inwiefern der Einarbeitungsaufwand in Relation zu meinem eigentlich geplanten kleinen Spiel ist.

Wie Du es beschreibst hört es sich fast an, als wenn da ein kleines Großprojekt auf mich zukommt :).

So von meiner Überlegung her, dachte ich es wäre in einer Woche Arbeit realisiert.
Mir reicht ja erstmal ein Männchen auf einer Tileset Map, welches ein Monster hauen kann.
Aus den Tutorials kann ich das meiste ja für meine Zwecke ableiten und schön Modular in Klassen unterbringen um später immernoch erweitern zu können.


Gruß
kbyte

Union_Freedom

Treue Seele

Beiträge: 156

Wohnort: Nähe Hannover

Beruf: Student

  • Private Nachricht senden

4

27.04.2011, 17:44

Hey.

Irgendwo ist es immer Aufwand. Es hängt davon ab, wie viel du erreichen möchtest. Wenn du nur eine tilebasierte Map haben willst auf der sich ein Spieler bewegt und die Kollision abfragen möchtest, dauert es sicherlich nicht solange.

Dann brauchst du für dein Objekt ja beispielsweise nur Textur, FeldX,FeldY (Wo es sich halt befindet), Ein Angriff , Leben und ggf. Mana oder soetwas. Deine Beschreibung war schon gut, wag dich doch erst einmal an die Tilemap und wenn die dann funktioniert, baust du in deine Map eine Liste mit allen Objekten ein, die sich darauf befinden.

mfg
Union_Freedom
Coder bei: http://crushing-gods.de/ (Folgt uns)
Erste Eindrücke zu Crushing Gods Link

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

27.04.2011, 18:14

Ich habe mal etwas über generische Tilemaps geschrieben:
Eine generische Tilemap

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

27.04.2011, 20:28

Ich würde sagen, fang mit der Karte an. Mach erstmal einen Screen. Dann erweiterst du auf mehrere Screens, wie es bei den alten Zeldateilen halt ist. Wenn das fertig ist baust du Link ein. Erstmal nur Bewegung. Danach fängst du dann Kollision mit der Umgebung an. Wenn das fertig ist, sucht du dir einen einfachen Gegner. Da sollte sich ja was finden lassen. Zur not ein Gegner, der sich zufällig bewegt, mit der Umgebung Kollidiert, und bei Berührung mit Link Schaden verteilt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

30.04.2011, 13:24

Ich weiß der RPG Maker nicht mit C# und XNA zu vergleichen ist ;)
Möchte es trotzdem einmal erwähnen, bevor ich mich an C# und "richtiger" programmierung herangewagt hatte, hab ich
mit einem Programm namens "RPG Maker" versucht ein Rollenspiel zusammenzuklicken. Das war extrem viel arbeit!!! und ich musste
nur Klicken!!!! Am besten suchst du dir leute die dir helfen bei deinem Spiel, gerade wenn du wirklich alles in C# Machen willst.

XNA ist dazu super geeignet, gibt speziell für RPGs was:
http://create.msdn.com/en-US/education/c…oleplaying_game

Dieses buch kann ich dir empfehen, da steht auch drin wie maps aufbauen, sogar bis hin zu 3D:
http://www.weltbild.de/3/15953585-1/buch…tml?wea=8002019

Also, je nachdem wie umfangreich das ganze werden soll... würde ich mich entscheiden ob ich wirklich XNA benutzen will....
Wenn da story und so weiter rein kommt.... pff.... da haste dir was vorgenommen.

tipp: Gibt auch den YoYo Game Maker 8.1... Hat zwar wieder nix mit programmieren zu tun, man erzielt aber sehr gute ergebnisse.

8

06.05.2011, 17:06

Hallo,

danke für die Tipps.

Da ich doch nicht soviel Zeit hatte, wie gehofft, bin ich noch nicht sehr weit, aber hab schon kleine Erfolge. Ist ja auch schon etwas :) .

Ich hab dazu mal ein Video auf Youtube hochgeladen.
[youtube]http://www.youtube.com/watch?v=C9tUrVBuD60[/youtube]

Die Steuerung über die Tastatur läuft recht gut, sobald ich den Xbox360 Controller benutze, springt die Grafik des Charakters ab und zu auf eine nicht begehbare Tile, wie man auch im Video sehen kann.

Wo ich gerade hänge, ist die Geschwindigkeit, wie man im Video sieht, rast der Charakter schon durch ein kurzen Tastendruck quer über die Map.
Ich meine irgendwo mal etwas gelesen zu haben, dass man dies über die Gametime regeln kann, hab dazu aber bis jetzt noch nichts passendes gefunden.



Grüße

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

06.05.2011, 17:48

Sieht so aus, als wenn du den Charakter immer ein Feld bewegen würdest. XNA berechnet normalerweise 60 Frames pro Sekunde. Dies kann man jedoch auch umstellen;) Das heisst, dass 60 mal pro Sekunde deine Logik ausgeführt wird. Ich gehe davon aus, du hast sowas:

Quellcode

1
Wenn(Tastendruck)dann bewegen um ein Feld


Das würde bedeuten, dass dein Charakter sich in einer Sekunde um 60 Felder bewegen kann. Du könntest jetzt als erstes sagen, dass dein Charakter sich nicht um ein ganzes Feld bewegt, sondern um weniger. Dafür könntest du die Koordinaten von deinem Charakter nicht als Indizes deiner Map speichern(also nicht als Feld-x und Feld-y auf der Map) sondern als die Koordinaten des Pixels auf dem er sich befindet. Dann bewegst du deinen Charakter erstmal nur um ein paar Pixel.
Das was du mit der Zeit meinst, ist die Geschwindigkeit deines Charakters in Abhängigkeit von der Zeit zu nehmen. Das wäre dann sowas:

Quellcode

1
x = x + speed*zeit


Der Wert von Speed muss dann natürlich passend zur Einheit von Zeit sein. Also je nachdem ob du zum Beispiel Sekunden oder Millisekunden nimmst;)
Versuch es erstmal ohne die Zeit und wenn das klappt kannst du es ja mal ohne Framebegrenzung und mit Zeit machen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

10

07.05.2011, 13:53

Scheinbar habe ich gerade einen kleinen Hänger.
Ich habe es mal ein bisschen umgeschrieben. Jetzt läuft er zwar langsamer, wenn ich die Tastatureingabewerte verkleinere nur passen dann die Kollisionen nicht mehr.
Ich vermute mein Problem mal, beim GetTile, nur fällt mir eben keine gescheite Lösung ein.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public const float speed = 32f;
...

float x = hero.Position.X /speed ;
float y = hero.Position.Y /speed ;


if (kbState.IsKeyDown(Keys.A)) x += -1f;
if (kbState.IsKeyDown(Keys.D)) x += 1f;
if (kbState.IsKeyDown(Keys.S)) y += 1f;
if (kbState.IsKeyDown(Keys.W)) y += -1f;

x += gamePad.ThumbSticks.Left.X;
y -= gamePad.ThumbSticks.Left.Y;

if (x < karte.GetWidth()  && y < karte.GetHeight()  && x > 0 && y > 0)
{
      if (karte.GetTile((int)x  , (int)y).Collision == false)
      hero.Position = new Vector2(x  * speed , y * speed );
}

Werbeanzeige