GameGrid Probleme mit mehrere Actors

  • Themenstarter Themenstarter Bengaltiger
  • Beginndatum Beginndatum
B

Bengaltiger

Gast
Hallo

ich hab folgendes problem:
ich möchte 2verschiedene actors in meinem spiel erstellen
einmal player1 und einmal aliens. das erstellen von aliens ist von der simulationsperiode abhängig, also nach jeder periode soll es eine methode checken, falls es true ist soll einalien geschaffen werden. doch mein problem ist wenn ich zuerst den player erstelle dann die aliens, verschwinden die aliens und tauchen kurz wieder auf. doch erstelel ich die aliens zuerst klappt alles wunderbar aber ich möchte den player schon vorher haben-.-"

vllt hilf der code weiter

Java:
// RocketGun.java

import ch.aplu.jgamegrid.*;
import java.awt.event.KeyEvent;
import java.awt.*;
import java.util.ArrayList;


class RocketGun extends GameGrid{
  public int score=0;
  public int life=3;
  public RocketGun(){
    super(600, 600,1,null,"sprites/galaxy.jpg",false);
     String bar;
     bar= String.format("RocketGun created by Imran ----> "+"Score: "+score+"   "+"Life: "+life+"");
     setTitle(bar);
     setSimulationPeriod(2);
     getBg().save();
     getBg().setFont(new Font("Arial", Font.CENTER_BASELINE, 16));
     getBg().drawText("Use the arrow-keys to move and spacebar to shoot.", new Point(100, 480));
     getBg().drawText("The game starts in 5 seconds!", new Point(150, 500));
                     }

  public void Player1(){
     Player rocket = new Player();
     addActor(rocket, new Location(300,550));
                         }
  public void Aliens(){
   
    RocketsTyp1 rocket1[] = new RocketsTyp1[4];
    Location loc = new Location(0,0);
    for (int i = 0; i < 3; i++){
    rocket1[i] = new RocketsTyp1();
    if(isEmpty(loc)){
    delay(3000);
    addActor(rocket1[i], new Location(loc));}}
     
                               }

  public static void main(String[] args){
     RocketGun galaxy = new RocketGun();
     galaxy.show();
     delay(5000);
     galaxy.getBg().clear();
     galaxy.getBg().restore();
     galaxy.Player1();
     galaxy.doRun();
     galaxy.Aliens();
     }
 
hmm ok

Java:
//<---Begin class Player--->\\
class Player extends Actor{
 public Player(){
   super("sprites/rocket1.gif");}
                     }
 public void act(){
   if (gameGrid.isKeyPressed(KeyEvent.VK_LEFT) && getX() > 0){
      setX(getX() - 1);
      setSlowDown(-10);}
   if (gameGrid.isKeyPressed(KeyEvent.VK_RIGHT) && getX() < 599){
      setX(getX() + 1);
      setSlowDown(-10);}
   if (gameGrid.isKeyPressed(KeyEvent.VK_UP) && getY() > 0){
      setY(getY() - 1);
      setSlowDown(-10);}
   if (gameGrid.isKeyPressed(KeyEvent.VK_DOWN) && getY() < 599){
      setY(getY() + 1);
      setSlowDown(-10);}
                 }

                                                               }
//<---End class Player--->\\

//<---Begin class RocketsTyp1--->\\
class RocketsTyp1 extends Actor{
 public RocketsTyp1(){
   super(true,"sprites/rocket1.gif");
      setVertMirror(true);}

private void route(){
      Location loc= new Location(getX()+5,(int)(1f/90000*Math.pow((getX()+5)-300,3)+300));
      setLocation(loc);
                    }
 public void act(){
      setSlowDown(50);
      route();
  if(getX()<300){
      turn(1*(1.5));}
  else{
      turn(-1*(1.5));}
  if(!isInGrid()){
       removeSelf();}
                  }
                               }
//<---End class RocketsTyp1--->\\
 
Die Rackete wird falsch initialisiert.

Java:
Actor(boolean isRotatable, java.awt.image.BufferedImage spriteImage)

Code:
isRotatable
muss auf false gesetzt werden. Ansonsten wird versucht das Bild zu drehen.
Defaultmaessig ist alle 6 Grad eine Rotation vorgesehen, somit ergibt sich 60 verschieden darstellbare Richtungen welche alle durch ein Image hinterlegt werden muessen. Fehlt das Image (wenn nur 1 vorhanden ist) verschwindet die Rackete nach einer Drehung von mehr als 6 Grad.

Deshalb isRotatable auf false setzten. Damit wird nur die Direction berechnet aber nicht das Bild.

Java:
public RocketsTyp1() {
	super(false, "sprites/rocket.jpg");
	setVertMirror(true);
}
 
Ist natuerlich Quatsch was ich geschrieben habe. Bei mir ist der oben beschriebene Bug aufgetaucht weil ich fuer den Player und die Rackete dasselbe Image verwendet habe (das scheint aber trotzdem ein Bug im API zu sein).

doch mein problem ist wenn ich zuerst den player erstelle dann die aliens, verschwinden die aliens und tauchen kurz wieder auf.

Dein Problem konnte ich jedoch nicht nachvollziehen. Bei mir erscheint zuerst der Player und dann die Aliens ohne zu verschwinden.
 

Neue Themen


Zurück
Oben