der Player bewegt sich nicht

NHI

Mitglied
Hi, ihr habt mir schon oft weiter geholfen und ich hoffe ihr könnt es auch dieses mal. Ich schicke euch den Code, das Problem ist, dass sich ein kleines Rechteck, dass der Player sein soll nicht bewegt bei der Benutzung der WASD- Tasten.

Schon mal Danke im Voraus
LG NHI
 

NHI

Mitglied
Java:
package HindernisslaufPack;

import java.util.Timer;
import java.util.TimerTask;

public class Background {
Timer move;

Background() {
    move = new Timer();
    move.scheduleAtFixedRate(new TimerTask()  {

        @Override
        public void run() {
           
           
           
            if (Var.BackX1 > -800)   {
               
                Var.BackX1 -= 2;
            }
            else Var.BackX1 = -2;
           
           
           

            if (Var.BackX2  > 0)   {
               
                Var.BackX2 -= 2;
            }
            else {
            Var.BackX2 = 790;
            }
           
           
           
           
                       
        }
       
       
       
       
       
       
       
       
       
    }, 0,12);
   
   
   
   
   
}
}
Java:
package HindernisslaufPack;

import java.awt.*;
import javax.swing.*;

public class Draw extends JLabel{
protected void paintComponent(Graphics g) {
   
    super.paintComponent(g);
   
    Graphics2D g2D = (Graphics2D) g;
    g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
   
    g.drawImage(Var.Background1, 0, Var.BackX1, 800, 600,null);
    g.drawImage(Var.Background2, 0, Var.BackX2, 800, 600,null);
    g.fillRect(Var.Pgegnerx, Var.Pgegnery, 20, 20);
    for (int i =0; i<4; i++) {
       
        g.fillRect(Var.gegnerx[i],Var.gegnery[i], 100, 20);
    }
   
   
    repaint();
   
    Var.BackX1 = 0;
    Var.BackX2 = 800;
   
}
   

}
 

NHI

Mitglied
Java:
package HindernisslaufPack;

import java.util.Timer;
import java.util.*;

public class gegner {
Timer move;
int temp;
public gegner () {
   
    Timer move = new Timer();
   
for (int i=0; i<4; i++)  {
   
    temp += 150;
       
        Var.gegnery[i] = 600-temp;
        Var.gegnerx[i] = 1200-temp;
       
       
    }   
   
   
   
   
    move.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
           
            for (int i =0; i<4; i++) {
               
            Var.gegnerx[i] -= Var.gegnerspeed[i];
                if (Var.gegnerx[i] <0) {
                   
                    Var.gegnerx[i] = 1000;
                }
       
           
           
        }

        }
   
       
       
       
    }, 0, 8);
   
    }
}
Java:
package HindernisslaufPack;

import java.awt.Window;

import javax.swing.JFrame;

public class GUI {

    public GUI() {
       
        Var.jf1.setSize(Var.Breite, Var.Höhe);
        Var.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Var.jf1.setLocationRelativeTo(null);
        Var.jf1.setTitle("Hinddernisslauf");
        Var.jf1.requestFocus();
        Var.jf1.setVisible(true);
       
        Draw draw = new Draw();
        draw.setBounds(0,0,Var.Breite,Var.Höhe);
        draw.setVisible(true);
        Var.jf1.add(draw);
       
       
       
       
    }
   
   
   
   
}
Java:
package HindernisslaufPack;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class KeyHandler implements KeyListener {

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W )    {
           
        Var.moveup = true;
        }   
        else if (e.getKeyCode() == KeyEvent.VK_S) {
           
            Var.movedown = true;
        }
        else if (e.getKeyCode() == KeyEvent.VK_A) {
           
            Var.moveleft = true;
        }
        else if (e.getKeyCode() == KeyEvent.VK_D) {
           
            Var.moveright = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W )    {
           
            Var.moveup = false;
            }   
            else if (e.getKeyCode() == KeyEvent.VK_S) {
               
                Var.movedown = false;
            }
            else if (e.getKeyCode() == KeyEvent.VK_A) {
               
                Var.moveleft = false;
            }
            else if (e.getKeyCode() == KeyEvent.VK_D) {
               
                Var.moveright = false;
            }
       
    }

    @Override
    public void keyTyped(KeyEvent e) {
       
       
    }

}
Java:
package HindernisslaufPack;

public class Main {

    public Main() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        new Var();
        new GUI();
        new Draw();
        new Background();
        new gegner();
        new KeyHandler();
        new PlayerMovement();
    }

}
Java:
package HindernisslaufPack;

import java.util.Timer;
import java.util.TimerTask;

public class PlayerMovement {
Timer move;
   
public PlayerMovement() {
   
    move = new Timer();
    move.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
       
            if (Var.moveup == true) {
                if (Var.Pgegnery >= 40 )  {
                   
                    Var.Pgegnery =Var.Pgegnery - 2;
                } }
               
            else if (Var.movedown == true) {
                    if (Var.Pgegnery >= 40 )  {
                       
                        Var.Pgegnery += 2;
                    }     }
               
            else    if (Var.moveright == true) {
                        if (Var.Pgegnerx <= 760 )  {
                           
                            Var.Pgegnerx  += 2;
                        } }
               
            else            if (Var.moveright == true) {
                            if (Var.Pgegnerx >= 40 )  {
                               
                                Var.Pgegnerx  -= 2;
                            }
                   
                        }
               
            }
           
           
           
           
        }, 0, 7);
       
       
       
       
       
   
   
   
            }
   
}
Java:
 package HindernisslaufPack;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Var {

   
     static JFrame jf1 = new JFrame();
     static int Breite = 800;
    static int Höhe = 600;
   
    static BufferedImage Background1;
    static BufferedImage Background2;
    static BufferedImage man1;
   
   
    static int[] gegnerx = new int[4];
    static int[] gegnery = new int[4];
    static int Pgegnerx = 200, Pgegnery = 400;
   
   
    static int BackX1;
    static int BackX2;
    static int[] gegnerspeed = new int[4];
   
    static boolean moveup;
    static boolean movedown;
    static boolean moveright;
    static boolean moveleft;
   
       
        public Var() {
           
            try {
                Background1  = ImageIO.read(new File ("rsc/MeinNeuesBild.png"));
                Background2  = ImageIO.read(new File ("rsc/MeinNeuesBild.png"));
               
               
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("Datei nicht gefunden");
            }
           
            gegnerspeed [0] = 2;
            gegnerspeed [1] = 3;
            gegnerspeed [2] = 2;
            gegnerspeed [3] = 4;
           
           
           
        }
   

}
s
 

Javinner

Top Contributor
@NHI
Ich weiß, woher du diesen Code hast ;)
Kurz um, vergiss den Kerl, das ist alles nichts, was er da macht! Lerne lieber Grundlagen, bevor du diesen Quark abtippst!

Was hier wichtig ist, ist Hierarchie. Ein Fenster hat ein Zeichenblatt, auf dem Zeichenblatt werden Figuren gezeichnet. Die Figuren selbst sind für ihre Position zuständig, denn das Zeichenblatt zeichnet nur die aktuelle Position der Figuren. Eine Figur hat also ein Bild und eine Koordinate. Wenn du dann das Spiel startest, wird ein Timer gestartet, welcher sequentiell alles in ihm Vorhandene abläuft. Hier werden dann die Koordinaten der Figuren, bzw. das Hintergrundbild, welches hier in Bewegung ist, auf ein aktuellen Stand gebracht. Erst in der Zeichenmethode des Zeichenblattes wird alles neu gezeichnet.

Dieses Stück Code..
Java:
public class Main {

    public Main() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        new Var();
        new GUI();
        new Draw();
        new Background();
        new gegner();
        new KeyHandler();
        new PlayerMovement();
    }

}
..ist Fusch! Denn hier in der Main-Methode findet ja das Spielen statt. Das ist sowas für den A****, da gibt es auch kein Verbesserungsvorschlag, das gehört ganz anders gemacht.

edit: wenn du einige Klassen postest und es sich in die Länge zieht, dann ist es eventuell besser, diese in Spoiler zu packen. Die Einstellung findest du in dem selben Menü für Code, beachte, dass Code-Darstellung in den Spoiler gehört, also so:
SPOILER
CODE
/CODE
/SPOILER
nimmt wesentlich weniger Platz ein
 

NHI

Mitglied
Danke für die Antwort aber der code wurde nicht abgetippt, ich habe ihn selbst geschrieben ich habe geguckt wie es in einigen tutorials angegangen wird aber das ist mein eigener Code und keine Kopie, die Idee des Games ist ebenfalls meine eigene. Ick kann einige der Grundlagen sonst wäre ich nicht in der Lage gewesen das zu schreiben ich weiss wie der Code funktioniert und habe ihn nicht Blind abgetippt. Alllerdings bitte ich dich mir näher zu erläutern wie du das von der Struktur angehen würdest.
 

mihe7

Top Contributor
@NHI Das hat er Dir doch geschrieben:

Was hier wichtig ist, ist Hierarchie. Ein Fenster hat ein Zeichenblatt, auf dem Zeichenblatt werden Figuren gezeichnet. Die Figuren selbst sind für ihre Position zuständig, denn das Zeichenblatt zeichnet nur die aktuelle Position der Figuren. Eine Figur hat also ein Bild und eine Koordinate. Wenn du dann das Spiel startest, wird ein Timer gestartet, welcher sequentiell alles in ihm Vorhandene abläuft. Hier werden dann die Koordinaten der Figuren, bzw. das Hintergrundbild, welches hier in Bewegung ist, auf ein aktuellen Stand gebracht. Erst in der Zeichenmethode des Zeichenblattes wird alles neu gezeichnet.
 

NHI

Mitglied
Tue ich doch in der Klasse Draw wird der Player gezeichnet und repaint hab ich auch, nur die position des players verändert sich in PlayerMovement
 

Robat

Top Contributor
Ick kann einige der Grundlagen sonst wäre ich nicht in der Lage gewesen das zu schreiben
Ich kann nicht beurteilen wie deine Kenntnisse sind und will ich auch gar nicht - der Code allerdings sagt etwas anderes. Du erstellst wahllos neue Instanzen von Klassen um sie dann in einer anderen Klasse neu zu erstellen (Draw-Klasse als Beispiel), der KeyListener wird nirgendswo hinzugefügt (was im übrigen auch dein Problem sein sollte, warum der Spiele nicht bewegt wird), das Geheimnisprinzip wird absolut nicht beachtet (alles public static Variablen), du legst tw. Member einer Klasse an nur um dann eine Variable mit dem gleichen Namen lokal noch mal anzulegen und sinnvolle Objekte gibt es auch nicht wirklich.

Ich will dir nicht zu nahe treten, aber vielleicht solltest du vorher noch mal einen Schritt zurückgehen, bevor du mit der GUI / Spiele Programmierung weiter machst. Es ist wichtig die Grundlagen von Java drauf zu haben, sonst schreibt man tw. Code der zwar im Moment funktioniert aber irgendwann zu einem Problem wird. Klar kriege ich den Nagel auch mit einem Löffel in die Wand .. irgendwann .. aber schön ist es nicht.

BTW: In paintComponent ein repaint() aufzurufen solltest du vermeiden, da repaint() intern auch wieder paintComponent() aufruft. Es wäre schlauer repaint() immer nur dann aufzurufen, wenn es auch nötig ist - nämlich wenn sich Parameter verändert haben
 

NHI

Mitglied
@mihe7 du kannst gerne meinen Code kritisieren dafür bin ich immer offen aber bitte auf respektvolle art und weise.
Das der Code chaotisch und von schlechtem Stil ist weiss ich jetzt auch. Der KeyHandler wird doch in der Main aufgerufen.

Die Grundlagen kann ich, da bin ich sicher, allerdings fehlt mir sehr Erfahrung oder auch Übung.Dieses Spiel dient mir als Übung, die ja schließlich nötig ist um diese anzuwenden. Mein Problem ist, dass ich eben noch sehr wenige Projekte realisiert habe und noch keine Rückmeldung derartiger Art bezüglich meines Stil, meiner Konstruktion etc. bekommen habe und entsprechend nur auf die Funktion geachtet, dessen wurde ich ja nun eines besseren belehrt.
Ich werde versuchen mich zu bessern, aber jeder fängt doch einmal so an, oder etwa nicht? Um die Grundlagen zu vertiefen, wollte ich Projekte realisieren um auch Dinge anzuwenden.
 

mihe7

Top Contributor
du kannst gerne meinen Code kritisieren dafür bin ich immer offen aber bitte auf respektvolle art und weise.
Das der Code chaotisch und von schlechtem Stil ist weiss ich jetzt auch.
Ich habe nicht Deinen Code kritisiert. Das Vorgehen, die Klassenbezeichnungen und selbst Variablennamen kennt man zum großen Teil aus diversen Threads. Eine Quelle ist das Pong-"Tutorial", das auf YouTube zu finden ist.

Der KeyHandler wird doch in der Main aufgerufen. Die Grundlagen kann ich, da bin ich sicher
Grundlagen: in Main wird kein KeyHandler aufgerufen, sondern ein KeyHandler-Objekt erstellt, das aber nirgends verwendet wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Arif Maus-Objekt im Player Klasse implementieren !? Spiele- und Multimedia-Programmierung 2
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
F Windows Media Player steuern Spiele- und Multimedia-Programmierung 2
C fünf oder sechs player states? Spiele- und Multimedia-Programmierung 7
Ivan Dolvich Musik in externen Player starten Spiele- und Multimedia-Programmierung 3
R JLayer player spielt nur eine mp3 Datei ab Spiele- und Multimedia-Programmierung 1
L JMF Player spielt mp3 nur ohne Ton Spiele- und Multimedia-Programmierung 14
G mp3 player mit javazoom Spiele- und Multimedia-Programmierung 13
P RPG Sprite-Player Anim Problem Spiele- und Multimedia-Programmierung 11
T Problem mit laufen vom Player Spiele- und Multimedia-Programmierung 3
R Spiele für den DVD Player Spiele- und Multimedia-Programmierung 6
K Mein Jump and Run charakter bewegt sich nicht mehr rückwärts... Spiele- und Multimedia-Programmierung 0
A Spielball bewegt sich nicht richtig, prallt falsch ab Spiele- und Multimedia-Programmierung 7
S Polygon bewegt sich nach mehreren aufrufen immer schneller Spiele- und Multimedia-Programmierung 3
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
R Memory - Nicht alle Button lassen sich aktivieren? Spiele- und Multimedia-Programmierung 1
P Sich bewegende Kamera Spiele- und Multimedia-Programmierung 12
I Wo befindet sich ein Punkt? Spiele- und Multimedia-Programmierung 6
R Game Loop verhält sich eigenartig Spiele- und Multimedia-Programmierung 1
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
S Animation zieht "Spur" hinter sich her Spiele- und Multimedia-Programmierung 2
M Bildschirmgröße ändert sich Spiele- und Multimedia-Programmierung 10
M Würdet ihr sagen Java Applets eignen sich gut Spiele- und Multimedia-Programmierung 5
J Java3D - Farben vermischen sich Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
CookieSoft 3D Würfel will sich nicht drehen! [LWJGL] Spiele- und Multimedia-Programmierung 2
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
J Pufferproblem bei sich wiederholenden MouseEvents Spiele- und Multimedia-Programmierung 4
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
S Programm hängt sich auf wenn Lied abspielt Spiele- und Multimedia-Programmierung 4
W 2 Bälle, die sich abstoßen Spiele- und Multimedia-Programmierung 24
F RPG - Spielfigur soll sich nicht frei bewegen können. Anregugen wären gerne gesehen^^ Spiele- und Multimedia-Programmierung 13
Ivan Dolvich [LWJGL] Texturen überlagern sich Spiele- und Multimedia-Programmierung 2
P JFileChooser öffnet sich drei mal Spiele- und Multimedia-Programmierung 4
Dragonfire Java Sound API - Lautstärke ändert sich nicht Spiele- und Multimedia-Programmierung 2
H Jogl-Animator - Inhalt ändert sich nicht Spiele- und Multimedia-Programmierung 4
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
B Bounds drehen sich nicht mit.... Spiele- und Multimedia-Programmierung 7
R Eignet sich Java für ein Beat'em'Up? Spiele- und Multimedia-Programmierung 3
R Kreuz lässt sich nicht zeichnen Spiele- und Multimedia-Programmierung 11

Ähnliche Java Themen

Neue Themen


Oben