Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Kann mir jemand helfen?
Bin gerade dabei eine SuperMario Spiel zu erstellen.
Es funktioniert schon fast alles nur wenn ich in der Klasse Plattform mit einer set Methode etwas aus der Klasse Player aufrufen lassen will (z.B. die Spieler pos X) dann gibt er mir den Wert 0 und nicht den richtigen.
Ich habe auch noch eine Klasse Board wo ein Timer läuft und wo auch mit get und set Methoden die Klasse Player und Plattform aufgerufen wird.
vl. liegt da der Fehler oder am Timer.
Jz haben wir beide ein Problem, bei dir stimmt etwas mit deinem Source nicht und meine magische Glaskugel mit der ich Einblick in deinen Source bekommen hätte ist kaputt.
keine Ahnung xD es ist so heiß draußen daher ist mein Hirn erhitzt.:lol:
Java:
public class Plattform {
private int x,y,bildHoehe;
private String art;
private Image bild;
ImageIcon plattform1 = new ImageIcon("C:/plattform1.gif");
Player pl = new Player();
public Plattform()
{
bildHoehe = plattform1.getIconHeight();
}
public void plattformRun()
{
//Überprüfen welche Art von Plattform gewählt wird.
if(art == "pf1")
{
bild = plattform1.getImage();
}
System.out.println(pl.getPosX());
//Überprüfen ob Spieler auf Plattform ist
if(pl.getPosY() >= y && pl.getPosX() <= x && pl.getPosX() >= x+bildHoehe)
{
pl.setFreeFall(false);
}
else
{
pl.setFreeFall(true);
}
}
public void setPosY(int y)
{
this.y = y;
}
public void setPosX(int x)
{
this.x = x;
}
public void setArt(String art)
{
this.art = art;
}
public int getPosY()
{
return y;
}
public int getPosX()
{
return x;
}
public Image getPicture()
{
return bild;
}
}
Java:
package game;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.ImageIcon;
public class Player implements KeyListener{
private Image bild;
ImageIcon posRIGHT = new ImageIcon("C:/playerR.gif");
ImageIcon posLEFT = new ImageIcon("C:/playerL.gif");
ImageIcon posDOWNL = new ImageIcon("C:/playerDL.gif");
ImageIcon posDOWNR = new ImageIcon("C:/playerDR.gif");
ImageIcon posUPR = new ImageIcon("C:/playerUR.gif");
ImageIcon posUPL = new ImageIcon("C:/playerUL.gif");
ImageIcon posNORMAL = new ImageIcon("C:/playerN.gif");
private int posX = 0;
private int posY = 295;
private int speed=5;
private int maxHight;
//Tasten
private boolean keyUP = false;
private boolean keyRIGHT = false;
private boolean keyLEFT = false;
private boolean keyDOWN = false;
private boolean jumpL = true;
private boolean jump = true;
private boolean changeY = true;
private boolean freeFall = true;
private int imageHeight;
private int imageWidth;
public Player()
{
bild = posNORMAL.getImage();
}
public void setPosX(int posX)
{
this.posX = posX;
}
public void setPosY(int posY)
{
this.posY = posY;
}
public int getPosX()
{
return posX;
}
public int getPosY()
{
return posY;
}
public Image getImage()
{
return bild;
}
public int getImageHight()
{
return imageHeight;
}
public int getImageWidth()
{
return imageWidth;
}
public boolean getMovedRIGHT()
{
return keyRIGHT;
}
public int getSpeed()
{
return speed;
}
public void setFreeFall(boolean freeFall)
{
this.freeFall = freeFall;
}
public void move()
{
imageHeight = bild.getHeight(null); //Bildhöhe des Spielers
imageWidth = bild.getWidth(null); //Bildweite des Spielers
if(freeFall == true)
posY++; //FreierFall
if(keyLEFT == true)
{
posX-= speed;
bild = posLEFT.getImage();
}
if(keyRIGHT == true)
{
posX+= speed;
bild = posRIGHT.getImage();
}
if(keyUP == true)
{
if(jump == true) //Die Höhe des Spielers wird beim Springen gelesen. (1MAL)
{
maxHight = posY-150; //Sprunhöhe des Spielers
jump = false;
}
if(posY > maxHight && jumpL == true) //Überprüfen ob der Spieler sich und der max Sprunghöhe befindet
{
posY -= speed; //Spieler fliegt nach oben.
}
else //Wenn Spieler max Höehe erreicht hat.
{
jumpL = false;
posY+= speed; //Spieler fliegt wieder nach unten.
if(keyDOWN == true)
{
if(posY >315)
{
keyUP = false;
jumpL = true;
}
}
else
{
if(posY > 295) //Punkt wo der Spieler wieder landet
{
keyUP = false;
bild = posNORMAL.getImage();
jumpL = true;
jump = true; //Die Höhe des Spielers wird wieder beim nächsten Sprung gelesen.
}
}
}
}
//Bewegungsbilder setzen
if(keyDOWN == true && keyLEFT == true)bild = posDOWNL.getImage();
if(keyDOWN == true && keyRIGHT == true)bild = posDOWNR.getImage();
if(keyUP == true && keyLEFT == true)bild = posUPL.getImage();
if(keyUP == true && keyRIGHT == true)bild = posUPR.getImage();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT)
{
keyLEFT = true;
}
if( key == KeyEvent.VK_RIGHT)
{
keyRIGHT = true;
}
if( key == KeyEvent.VK_DOWN)
{
keyDOWN = true;
bild = posDOWNR.getImage();
if(changeY == true) //wird nur 1mal ausgeführt /da sonst der Spieler nach unten fliegt.
{
posY +=20; //Spieler wird verkleinert da er sich duckt
changeY = false;
}
speed -= 2; //Speed wird langsamer da Spieler sich duckt
}
if( key == KeyEvent.VK_UP)
{
keyUP = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT)
{
if(keyDOWN == true)
{
bild = posDOWNL.getImage();
}
else
{
bild = posNORMAL.getImage();
}
keyLEFT = false;
}
if( key == KeyEvent.VK_RIGHT)
{
if(keyDOWN == true)
{
bild = posDOWNR.getImage();
}
else
{
bild = posNORMAL.getImage();
}
keyRIGHT = false;
}
if( key == KeyEvent.VK_DOWN)
{
keyDOWN = false;
if(changeY == false)//wird nur 1mal ausgeführt /da sonst der Spieler nach oben fliegt.
{
posY -=20;//Spieler wird vergrößert da er sich nicht mehr duckt
changeY = true;
}
speed += 2; //Speed wird wieder erhöht
bild = posNORMAL.getImage();
}
}
}
Der Player, welcher in der Platform erzeugt wird, ich ja nach außen nicht sichtbar. Wie kann dann ein Timer in Board die Position dessen verändern? Hast du evtl. zwei verschiedene Player-Objekte?!
bspw. indem du der Klasse bei der initialisierung den Player übergibst:
Java:
public class Player {
public Player() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Player player = new Player();
Plattform plattform = new Plattform(player);
}
}
class Plattform {
private Player player;
public Plattform(Player player) {
this.player = player;
}
}
nach dem gleichen Prinzip...aber keine Ahnung, ob das so Sinn macht...:
Java:
public class Player {
public Player() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Player player = new Player();
Plattform plattform = new Plattform(player);
Board board = new Board(plattform);
// board.getPlattform().getPlayer().setPosY(5);
}
}
class Plattform {
private Player player;
public Plattform(Player player) {
this.player = player;
}
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
}
}
class Board {
private Plattform plattform;
public Board(Plattform plattform) {
this.plattform = plattform;
}
public Plattform getPlattform() {
return plattform;
}
public void setPlattform(Plattform plattform) {
this.plattform = plattform;
}
}