Autor Beitrag
Terrenay
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 01.04.14 21:49 
Hallo, ich hab in der letzten Zeit ein Tower-Defense-Spiel programmiert und muss sagen, das Ergebnis war gar nicht so schlecht fürs erste Spiel. Heute hat mich dann plötzlich der Reiz gepackt, ein kleines RPG zu programmieren, also so was Zelda-artiges, aber mit eigenen Ideen. Tjaaaaaaaaa.. ich musste vor geschlagenen 3 Stunden dann sehen, dass ichs nicht mal hinbring, den Spieler immer in der Mitte zu zeichnen und alle Texturen rundherum (also der Spieler schon, aber eben die Welt ist dann völlig falsch ^^)

Das heisst, ich will eine erste Map, sagen wir 1000x1000 Pixel gross, jedes Tile 50 Pixel. Also 20 Felder. Jetzt soll aber das Spielfeld, das man sehen kann, nur 500x500 Pixel gross sein. Der Spieler sol jetzt (wie bei Mario-Spielen) in der Mitte gezeichnet werden und die Welt so um ihn herum, dass es dann auch aussieht, als ob er sich bewegt. Also man bewegt den Spieler zwar, aber er wird trotzdem immer an die gleiche Position gezeichnet. Ich kriegs aber einfach nicht hin, dass sich die Welt dann auch so bewegt...

Kann mir da jemand einen verständlichen Vorschlag (gegen Codebeispiele hab ich nichts xD) geben? :)

Danke schonmal ^^



Bisher siehts bei mir so aus: (Wahrscheinlich katastrophal, ich schreib auch gerne nochmal alles um, wenns sein muss^^)

World-Klasse, also die Welt, die gerade geladen ist
ausblenden volle Höhe 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:
public static class World
    {
        private static int[,] _worldArray;
        private static List<Tile> _tileList = new List<Tile>(); 

        public static void Load(int world)
        {
            switch(world)
            {
                case 1:
                    _worldArray = new int[,]
                        {
                            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //20
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
                        };
                    break;
            }

            for (int y = 0; y < 4; y++)
            {
                for (int x = 0; x < 20; x++)
                {
                    _tileList.Add(new Tile(new Vector2(x*50,y*50), _worldArray[y,x]));
                }
            }
        }
   }



Tile-Klasse, speichert halt jedes Tile mit Position und Textur (Wenn ich die Textur im Konstruktor zuweise, krieg ich immer den Fehler, dass die Textur anschliessend den Wert null hat, ka wieso)
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public class Tile
    {
        public Vector2 Position { get; private set; }
        public Texture2D Texture { get; private set; }
        public int TileIndex { get; private set; }
        
        public Tile(Vector2 position, int tileIndex)
        {
            Position = position;
            TileIndex = tileIndex;
        }

        public void GetTexture()
        {
            if (TileIndex == 0)
                Texture = Graphics.Tile_Grass;
            else
                Texture = Graphics.Tile_Path;
        }
    }
papa69
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 79
Erhaltene Danke: 23

Win 10, Ubuntu
C#, Java, C
BeitragVerfasst: Mi 02.04.14 16:16 
ich glaube, ohne eine eigene "Kamera-Klasse" wird das schwierig werden. Du müsstest ja jedesmal deinen Standpunkt feststellen, vergleichen (ob er im Spielfeld ist etc.), die Mitte des Spielplans errechnen usw.

Ich habe schon laaaaaaaaaaaaange nichts mehr mit XNA gemacht, habe aber noch ein paar (nützliche) Links in meiner Lesezeichenliste.

Schau dir mal folgendes an: xnagpa.net/rpgtutorials.html, da wird an einem Beispiel gezeigt, wie's funktionieren kann. Und das ganze Schritt für Schritt. Ist zwar komplett in Englisch, kann man aber mit Schulenglisch und etwas gutem Willen schön == einfach lesen.

_________________
Daniel Bauer
... fatal ist nur, wenn sich das Licht am Ende des Tunnels als entgegenkommender ICE entpuppt ...