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

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

1

27.03.2010, 23:46

Höhenunterschiede bei isometric Game

Hey zusammen,

da ich ja im moment mit MyGUI nicht weiter komme wollte ich kurz ein kleines ISOgame schreiben ^^

habe nur eine Frage:

Wie malt man eigentlich bei der Isometric games die Bilder der Karte das sie so aussehen alsob es höhen unterschiede gäbe ? bei mir sieht das i wie blöd aus :/


(Link)
...

2

27.03.2010, 23:53

Meinst du jetzt die Grundfelder? Höhenunterschiede werden doch mit entsprechenden Grafiken realisiert.

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

3

27.03.2010, 23:54

ja ich weiß eben nicht wie ich die Grafiken malen soll, damit es halt wie ein echter höhenunterschied aussieht...
...

4

27.03.2010, 23:58

Kannst doch einfach mal ein wenig googeln. Geht halt ganz gut mit Schattierungen, usw.

Beispiel: http://www.wesnoth.org/images/sshots/wesnoth-1.6-2.jpg

http://pbem.brainiac.com/pbem_design.htm

5

28.03.2010, 00:08

http://mac.softpedia.com/screenshots/9-895_1.jpg

Das ist ein sehr gutes Beispiel. Einmal kann man einfach Klippen Grafiken in die Landschaft setzen, in AOE2 ändern die eigentlich gar nichts an der Höhe des Geländes, sondern sind einfach nur Hindernisse, aber der Mensch interpretiert es halt passend.
Desweiteren ist die Stadt etwas höher gelegen, man hat einen kleinen Hügel. Dort ist die Neigung des Geländes anders, was durch eine andere Schattierung erreicht wird (dunkler, da die Sonne in einem flacheren Winkel darauf scheint) und man kann evtl. die Textur entsprechend verzerren.
Wichtig ist dann noch, die Einheiten auch höher zu malen, also weiter oben am Bildschirm.
Lieber dumm fragen, als dumm bleiben!

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

6

28.03.2010, 00:16

ja nur mir ist eben z.B. hier:
http://www.noblemaster.com/public/image/Isometric-Heightmap-Java.jpg

aufgefallen, dass einige Bilder größer sind und einige kleiner... Gibts da bestimmte verhältnisse die man beachten sollte ? vorallem wenn ich meine Map hiermit lade:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for (int y=0 ;y<7; y++)
    {
        for (int x=0; x<7; x++)
        {
            yp = y*(16/2);
            if (y%2==1)
            {
                xp = x*32 + (32/2);
            }
            else
            {
                xp = (x*32);
            }
          }
     }


gibts ja ein chaos wenn einige bilder 32*16 und einige 32*20 groß sind oO
...

7

28.03.2010, 00:33

Prinzipiell sind Hohe Ebenen nicht größer oder Kleiner, als tiefer liegende, weil man in der Isometrischen Ansicht keine Perspektive hat.
Das Problem ist jetzt die Verzerrung, wenn man ein Tile kippt. Letztendlich musst du aber beim Rendern einfach nur die Höhe des Tiles (oder des Objektes) auf die y Position am Bildschirm addieren.
Die Tiles können unterschiedlich groß sein, oder alle gleich groß und dann entsprechend leere Stellen haben. Da muss man dann eben immer einen Offset addieren, damit sie korrekt angezeigt werden.
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

28.03.2010, 13:44

ich interessier mich auch dafür. wie speichert man eigentlich die tiles? die haben ja eine rautenform. speichern und rendern kann man aber nur in üblicher form. lässt man dann die pixel über dem rand einfach transparent?

gibt es dafür ein gutes tutorial?
ich hab nur tutorials zum erstellen der grafiken gefunden.
http://www.rhysd.com/tutorial/

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

9

28.03.2010, 14:11

so stimm habs hinbekommen einfach die Tiles in Paint erstellen (dabei darauf achten, dass die Vorderseite ganz hell ist linke seite etwas dunkler und rückseiten ganz dunkel) die höhenteile um den gewünschten wert auf einer Seite erhöhen (ich habe 1/4 der Tilehöhe genommen)...

Sobald dan die Map geladen wird, darauf achten, dass ab dem Tile, welches die höhe verändert alle folgenden Tiles um den erhöhten wert auch erhöhen ^^

hier einfach mein kleiner Testcode:

C-/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
44
45
46
47
    for (int y=0 ;y<7; y++)
    {
        for (int x=0; x<7; x++)
        {
            yp = y*(64/2)+ hight;
            if (y%2==1)
            {
                xp = x*128 + (128/2);
            }
            else
            {
                xp = (x*128);
            }
            String tp = st.nextToken();
            if(tp.compareTo("1") == 0)
            {
              drawImage(g2d, g1, xp, yp);
            }
            if(tp.compareTo("2") == 0)
            {
              drawImage(g2d, g2, xp, yp);
            }
            if(tp.compareTo("3") == 0)
            {
                if(first == false)
                {
                    hight -= 16;
                    yp -= 16;
                    first = true;
                }
              drawImage(g2d, g3, xp, yp);
            }
            if(tp.compareTo("4") == 0)
            {
              hight -= 16;
              yp -= 16;
              drawImage(g2d, g4, xp, yp);
            }
            if(tp.compareTo("5") == 0)
            {
               hight -= 16;
               yp -= 16;
              drawImage(g2d, g5, xp, yp);
            }
        }
        hight = 0;
    } 


hier ein pic von dem Ergebniss:


(Link)
...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

28.03.2010, 14:15

Hier gibts zwei ganz brauchbare Artikel:
http://www.gamedev.net/reference/articles/article738.asp
http://www.gamedev.net/reference/articles/article747.asp

Werbeanzeige