SpaceInvaders 101

seking01

Mitglied
hi,

ich brauche mal hilfe beim Space Invaders Tutorial 101 von Kevin Glass (Space Invaders 101 - An Accelerated Java 2D Tutorial | Coke And Code - Java Games and Games Development) .

Wir müssen für die Uni ein Space Invaders Spiel nachbauen..und das ganze nach 3 Vorlesungen Java in denen nur Grundkentnisse vermittelt wurden.
Ich hab mich nun hingesetzt und versucht mir alle Kentnisse anzueignen...aber beim SpriteStore fängts dann an zu scheitern.
Es gibt ja sicherlich eine einfachere, nciht so Ressourcen schonende Methode die Sprites in das Programm einzufügen...ich schaffs aber einfach nicht. Hat jemand ne Lösung, Idee, Anregung, Hinweis wie ich das angehen kann?

Vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
der Code ist doch schon fertig, welche Person auf diesem Planeten soll dann noch 'ich schaffs nicht' sinnvoll beantworten?
 

seking01

Mitglied
Ich hab mich absolut dumm ausgedrückt merke ich gerade.

Ich möchte das gesamte Projekt nicht einfach kopieren sondern schon nachbauen... allerdings ohne diesen SpriteStore mit einer anderen, von mir aus schlechteren möglichkeit, die Grafiken einzubauen.

Bei Projektabgabe kann ich ja schlecht den Code 1zu1 kopiert abgeben.. und da mir das mit dem SpriteStore absolut unklar ist... wollte ich eine einfachere Methode.

Der Rest des Tutorials ist eigentlich nicht so schwer zu verstehen für mich
 
S

SlaterB

Gast
der Store speichert die Bilder, so dass sie bei jedem Anfragen nicht wieder neu von der Festplatte geladen werden,
wenn du nur eine Handvoll Bilder hast, dann reichen auch ganz normale Variablen, schon ist der Store überflüssig,

Alternative zu Bildern von der Festplatte ist wohl nur selber malen, paintComponent, Graphics, drawLine, bekannt?
 

seking01

Mitglied
Ganz normale Variablen klingt gut.. ( Es soltlen schon gif`s sein.)
Meinst du das so, das ich für jedes meiner Bilder die ich verwnden möchte, eine Image Variable anlege und diese dann, je nachdem was gezeichnet wird, aufrufe?
 

seking01

Mitglied
Danke schonmal für deine Hilfe Anhaltspunkte.

Du scheinst dich mit dem Programme twas auszukennen.... ich probiere die geschichte gerade, klappt aber (natürlich) nicht so wie ich es gedacht habe.

ich dachte an folgendes vorgehen:
1. SpriteSotre löschen
Als nächstes habe ich den Konstruktor der Klasse Sprite geändert in
Java:
public Sprite(Image image, String ref) {
this.image = Toolkit.getDefaultToolkit().getImage(ref);}

Meine Idee dahinter ist, dass er so den Pfad des Bildes direkt über die Klasse Sprite bekommt.
Ist der Gedanke korrekt?
 
S

SlaterB

Gast
ich denke schon,

wieso gehst du nicht gleich einen Schritt weiter und setzt es so um und siehst es laufen oder nennst auftretende Probleme?
meine Anzahl Antworten sind begrenzt ;)
 

seking01

Mitglied
Naja, ich hab keine Idee wie ich das ganze nun der Entity Klasse mitteile...


bei
Java:
	public Entity(String ref,int x,int y) {
		this.sprite = SpriteStore.get().getSprite(ref);  // <<< muss gegen x ausgetauscht werden
		this.x = x;
		this.y = y;
		
	}


Da steh ich grad aufm Schlauch...
 
S

SlaterB

Gast
statt String ist der Parameter dann Sprite oder Image, je nachdem wie du es gern hättest,

wer immer der Aufrufer ist, muss dann halt dafür sorgen, dass er das Sprite-Objekt hat

z.B. bei
> ship = new ShipEntity(this,"sprites/ship.gif",370,550);
in Game lautet es nun
> ship = new ShipEntity(this,this.shipSprite,370,550);

und die Variable/ das Klassenattribut shipSprite muss dann eben vorher irgendwann angelegt worden sein
 

seking01

Mitglied
Danke danke, ich glaub ich habs verstanden, klappen tuts aber noch nciht soo ganz :)

ich hab nun folgende Änderungen vollzogen:

Game.class
Drei Sprite Objekte erstellt je eins für ship, alien und shot
Java:
Sprite shipSprite = new Sprite("sprites/ship.gif");
Sprite alienSprite = new Sprite("sprites/alien.gif");
Sprite shotSprite = new Sprite("sprites/shot.gif");


Der Aufruf des Schiffes / der Aliens mit neuem Parameter Sprote anstatt String
Java:
private void initEntities() {
		// create the player ship and place it roughly in the center of the screen
		ship = new ShipEntity(this,this.shipSprite,370,550);
		entities.add(ship);
		
		// create a block of aliens (5 rows, by 12 aliens, spaced evenly)
		alienCount = 0;
		for (int row=0;row<5;row++) {
			for (int x=0;x<12;x++) {
				Entity alien = new AlienEntity(this,this.alienSprite,100+(x*50),(50)+row*30);
				entities.add(alien);
				alienCount++;
			}
		}

Der Konstruktor in der Entity/ShipEntity/AlienEntity Klasse nun ebenfalls mit Sprite anstatt String.
Java:
	public Entity(Sprite sprite,int x,int y) {
		this.sprite = sprite;
		this.x = x;
		this.y = y;
		
	}
Java:
	public ShipEntity(Game game,Sprite sprite,int x,int y) {
		super(sprite,x,y);
		
		this.game = game;
	}
Java:
	public AlienEntity(Game game,Sprite sprite,int x,int y) {
		super(sprite,x,y);
		
		this.game = game;
		dx = -moveSpeed;
	}

Das Programm funktioniert ohne Fehlermeldung, aber es werden keine Grafiken angezeigt... :)

Ist ein offensichtlicher Fehler / falsches Denken zu erkennen?
 
S

SlaterB

Gast
möglich ist, dass es keine Bilder auf der Festplatte gibt, der Pfad dorthin falsch ist oder die Bilder nicht angezeigt werden können,

versuche erstmal eine einfache GUI zu erstellen dir ein Bild anzeigt
 

seking01

Mitglied
Hm habs hinbekommen!

Er hat tatsächlich die Bilder nicht gefunden...jetzt mit der neuen Methode funktioniert es nur, wenn ich den absoluten Pfad der Bilddateien angebe, warum auch immer...
 
S

SlaterB

Gast
System.out.println(new File("sprites/ship.gif").getAbsolutePath());
zeigt dir an, was Java aus dem relativen Pfad macht
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Mein SpaceInvaders Spiele- und Multimedia-Programmierung 10

Ähnliche Java Themen

Neue Themen


Oben