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

05.05.2012, 14:42

Java2D Spiel Frage

Hallo Leute,
ich bin neu im Forum. Seit ungefähr zwei, drei Monaten arbeite ich mit
Java und habe mir schon einiges an Wissen erarbeitet.

Ich wage mich jetzt an Spieleprogrammierung heran. Es soll ein 2D-Spiel
im Stil wie z.b. Pokemon sein. Die Programmiersprache ist Java.
Ich programmiere mit dem Standard JDK 1.6.

Leider stehe ich vor einem Problem. Ich habe ein Object[] objArr definiert
und darin füge ich in jede einzelne Position meine Objekte ein, die später im
Spiel erscheinen(Hintergrundbild, Häuser, Menschen, Tiere,...) sollen.

So schaut es im Code aus:

C#-Quelltext

1
2
3
4
5
Object[] objArr;

objArr[0] = new ObjectType();//DIe Klasse ObjectType hat natürlich setter und getter Methoden, mit der ich später auch die Koordinaten der Figuren ändern kann.
//ich kann leider nicht auf die Methoden zugreifen, weil, sieht selbst:
(ObjectType) objArr[0].setXKoordinate();//...das nicht funktioniert


Was mache ich denn falsch?

Danke im voraus

EDIT: Ich habe das jetzt folgendermaßen gemacht:

C#-Quelltext

1
2
3
4
obj.Obj.class.cast(objArr[i]).setX(i+1);
System.out.println(obj.Obj.class.cast(objArr[i].getX());
//mein Programm geht 2x in die for-schleife und als Ergebnis, wird mir in der Konsole angezeigt: 1 und 2,
//d.h. die privaten int in der Klasse Obj im package obj werden für jedes Obj in dem objArr geändert


Gibt es eine elegantere Lösung, bzw. ist diese Lösung schlecht?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kenan89« (05.05.2012, 14:56)


Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

05.05.2012, 14:54

  1. Die Variable "objArr" ist leer. Du musst sie mit einem Array füllen. (new object [5])
  2. Definiere besser kein Object-Array. Das wird sehr viel gecaste und ist auch eine potenzielle Fehlerquelle. Sofern dir Vererbung schon etwas sagt, erstelle eine gemeinsame Basisklasse für alle Obejkte im Spiel.

3

05.05.2012, 14:59

Eine Basisklasse für alle Objekte habe ich. Sie befindet sich im package "obj" mit dem Namen "Obj".
Diese hat eben getter und setter Methoden, für x,y Koordinaten der Figur z.B.

EDIT: DIe Variable objArr habe ich gefüllt, nur nicht hier gepostet,sry :)

Darkrel

Treue Seele

Beiträge: 143

Wohnort: Zürich

Beruf: Student ETH Zürich

  • Private Nachricht senden

4

05.05.2012, 15:21

Schonmal probiert

((ObjectType)objArr[0]).setXKoordinate();

?

So sieht das aus, als würdest du versuchen den Rückgabewert von setXKoordinate() in ObjectType zu casten.
:cursing:

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

5

05.05.2012, 18:25

ich würde für objekte generell kein arry empfehlen. was wenn du mal mehr objekte hinzufügen willst? das ahtet schnell mal in einer "index out of bounds exception" aus.
verwende für soetwas lieber ne liste.

das würde dann zB so aussehen:

1) eine klasse "Item1" erstellen mit beliebigen attributen und methoden (in dem beispiel jetzt showData() zum anzeigen aller attribute)

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Item1
{
    private String bezeihnung;
    private int zahl;
    
    //Konstuktor
    public Item1(String bezeichnung, int zahl)
    {
        this.bezeichnung = bezeichnung;
        this.zahl = zahl;
    }

    //Beispielmethode
    public void showData()
    {
        System.out.println("Bezeichnung: " + getBezeichnung());
        System.out.println("Zahl: " + getZahl());
    }


2) liste erstellen die dann beliebig oft befüllt werden kann, anschließender aufruf der showData() aller objekte der liste

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Start
{
    //erstellen einer liste für deine objekte
    public static List<Item1> Item1List = new ArrayList<Item1>();
    
    public static void main(String[] args)
    {
        //erstellen von 2 objekten und einfügen in die liste
        Item1 Item1 = new Item1("Erstes Item", 12);
        Item1List.add(Item1);

        Item1 Item2 = new Item1("Zweites Item", 13);
        Item1List.add(Item2);

        //durchlauf aller objekte der liste per foreach-schleife
        for (Item1 it : Item1List)
            it.showData();      

    }
}



es gibt viele verschieden ansätze für dein problem, das ist nur ein beispiel wie es aussehen kann. ich finds so eig. am einfachsten und durch eine ArrayList ist man was die größe angeht deutlich flexibler als bei einem normalen array.

EDIT:
HIER gibts ein nettes kurzes tutorial für dein einstieg in dei 2D grafik-programmierung in java. isn kleines spiel inkl. bewegung, kollisionserkennung etc

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Wirago« (05.05.2012, 18:32)


Werbeanzeige