2D-Grafik Sprung programmieren

Adnann307

Mitglied
Hallo!

Ich bin grad dabei einen Sprung zu programmieren, habe aber keinen Plan wie ich weiter kommen soll. Ich habe es mit einem Timer probiert klappt aber nicht.
Könntet ihr mir sagen welche Methode ich benutzen sollte(sollte simpel sein also nicht jetzt das es physikalisch endet).
 

Robat

Top Contributor
Zeig doch einfach mal was du versucht hast. Grundlegend musst du die y-Koordinaten der Figur bis zu einem Punkt erhöhen und danach wieder verringern.
 

Adnann307

Mitglied
@Robat
Also hab jetzt des hier. Jetzt schwebt die Figur einfach nach oben obwohl ich keine Taste dücke...


Java:
package JumpGame.DE;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;

public class Keyhandler implements KeyListener {

   
    public void keyTyped(KeyEvent e) {
       
       
    }

   
    public void keyPressed(KeyEvent e) {
       
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

           
            public void run() {
               
           
               
                if(e.getKeyCode()== KeyEvent.VK_A) {
                   
                    Var.sprung=true;
                   
                }   
           
           
            }
        }, 0, 9);
       
       
    }

   
    public void keyReleased(KeyEvent e) {
       
        if(e.getKeyCode()== KeyEvent.VK_A) {
           
            Var.sprung = false;
        }
       
       
       
       
       
       
    }

   

}
Java:
package JumpGame.DE;

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

public class Sprung {

    Timer spprung;
   
    public Sprung() {
       
        spprung = new Timer();
        spprung.scheduleAtFixedRate(new TimerTask() {

           
            public void run() {
               
                if(Var.sprung = true) {
                   
                    Var.figY --;
                   
                }
               
            }
           
           
       
       
        }, 0, 9);
       
       
    }

}
 

mihe7

Top Contributor
Ich weigere mich ja eigentlich, solchen "Code" zu "korrigieren" aber was willst Du außerdem mit dem Timer im Keyhandler? Du hast doch schon einen beim Sprung.
 

Robat

Top Contributor
Nachtrag: Ich würde mal darauf wetten, dass er nicht triggert weil du beim JPanel setFocusable(true) nicht aufgerufen hast.
Ist aber ins blaue geraten.
 

mihe7

Top Contributor
Java:
import java.awt.event.*;
import javax.swing.*;

public class Test {
    private KeyListener listener = new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("Key pressed on " + e.getSource().getClass());
        }
    };

    public void run() {
        JFrame frame = new JFrame();
        frame.addKeyListener(listener);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(800, 600);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

Adnann307

Mitglied
Sry wenn ich frage aber was soll ich damit, weil ich hab ja ein Frame schon...
(bin noch nd so gut wie ihr im programmieren also sry falls ich nerve mit meinen Fragen, jeder fängt mal klein an ._.)
 

Robat

Top Contributor
Zeig am Besten mal deinen Code wie er jetzt ist. Inklusive dem JFrame damit man sieht wie / wo du den Listener addest.
Aber mach bitte die "unnötige vielen Leerzeilen" raus, damit es nicht so viel Platz weg nimmt.
 

Adnann307

Mitglied
Java:
public Main() {
       
        new Var();
        new Paint();
        new Background();
        new Keyhandler();
        new Sprung();
        
        setResizable(false);
        setType(Type.POPUP);
        setTitle("Jump And Run");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,500);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        contentPane.setBackground(Color.WHITE);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        addKeyListener(new Keyhandler());
        setFocusable(true);
 

Adnann307

Mitglied
Java:
    Var.lbl1 = new Paint();
        Var.lbl1.setBounds(0, 0, 600, 500);
        Var.lbl1.setVisible(true);
        add(Var.lbl1);


Java:
public class Keyhandler implements KeyListener {

  
    public void keyTyped(KeyEvent e) {
   
      
            if(e.getKeyCode()==KeyEvent.VK_1) {
            Var.sprung=true;
            }  
      
        }

  
    public void keyPressed(KeyEvent e) {
                  
}

  
    public void keyReleased(KeyEvent e) {
      
        if(e.getKeyCode()== KeyEvent.VK_1) {
          
            Var.sprung = false;
          
        }


Java:
    spprung = new Timer();
        spprung.scheduleAtFixedRate(new TimerTask() {

          
            public void run() {
              
                if(Var.sprung == true) {
                  
                    Var.figY -= Var.sprung1;
                    System.out.println("Hallo");

Der Sprung ist nicht fertig, also hab bis jetzt nur das er hoch springt aber nicht runter kommt, aber das funktioniert ja auch nicht.
 

Robat

Top Contributor
Bevor das sich das hier jetzt noch unnötig hinzieht hier mal ein Beispiel für eine Sprung-Animation.
Java:
public class JumpTest {
    private static final Dimension WINDOW_SIZE = new Dimension(350, 350);

    private final Player player;
    private JComponent world;

    public JumpTest() {
        this.player = new Player(50, 260);
        buildAndShowUI();
        startGameLoop();
    }

    private void startGameLoop() {
        Timer timer = new Timer(5, e -> {
            player.update();
            world.repaint();
        });
        timer.start();
    }

    private void buildAndShowUI() {
        JFrame frame = new JFrame();
        frame.setSize(WINDOW_SIZE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        world = new JComponent() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.fillRect(player.getX(), player.getY(), player.getWidth(), player.getHeight());
            }
        };

        world.setFocusable(true);
        world.addKeyListener(getJumpListener());
        frame.add(world);
        frame.setVisible(true);
    }

    private KeyListener getJumpListener() {
        return new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    player.setJump(true);
                }
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    player.setJump(false);
                }
            }
        };
    }

    public static void main(String[] args) {
        JumpTest test = new JumpTest();
    }

    class Player {
        private Rectangle bounds; // bitte hier nicht awt.Rectangle nehmen - soll hier nur einen Container für x,y,width,height darstellen
        private boolean jump;
        private int gravity;
        private final int startY;

        public Player(int x, int y) {
            this.bounds = new Rectangle(x, y, 50, 50);
            this.startY = y;
        }

        public void update() {
            if(jump) {
                gravity = -3;
            } else {
                gravity = bounds.y > startY ? 0 : 3;
            }
            bounds.y += gravity;
        }
      
        /* Getter & Setter */
    }
}
Noch mal der Appel von mir: Setz dich hin und lern die Basics bevor du mit deinem Spiel weiter machst. Die Struktur deines Codes ist gelinde gesagt schrecklich und wird auf dauer nur mehr Fehler produzieren. Das ist auch in keinster Weise böse gemeint nur bist du nicht der erste mit so einer Struktur. Mir ist es ein Rätsel wo "Anfänger" so einen Aufbau herbekommen, aber sowas gehört verboten. Mach dich mit den Prinzipien von OOP vertraut, dann wirst du merken was wir dir damit sagen wollen.
 

Adnann307

Mitglied
Okey ich schau mir jetzt mal dieses OOP an und mit den Tutorials hör ich auch auf.
Aber wie soll ich dann neue Methoden lernen... wenn nicht mit Tutorials....
 

mihe7

Top Contributor
Aber wie soll ich dann neue Methoden lernen... wenn nicht mit Tutorials....

Dein Problem ist, dass Du ohne Grundlagen überhaupt nicht einschätzen kannst, was gut und was schlecht ist. Daher solltest Du Dich gerade zu Beginn eher an Quellen halten, deren Güte höher einzuschätzen ist. Das sind z. B. "offizielle" Quellen oder Werke, die in gedruckter Form verfügbar sind (was nicht heißen soll, dass jedes Buch gut ist). Oracle wird Dir über Java kaum Mist erzählen.

Für die Einschätzung, dass das YouTube-Tutorial nicht wirklich etwas mit OO zu tun hat, reichen z. B. bereits minimale Kenntnisse aus. So existieren Klassenvariablen und -methoden (das sind die static-Geschichten) unabhängig von Objekten. Wenn man aber keine Objekte verwendet, was soll das dann mit Objekt-Orientierung zu tun haben?
 

Adnann307

Mitglied
Ja also jetzt verstehe ich warum ihr meine Struktur flammt XD. Hab mir ein 1 stündiges Video über OOP reingezogen und wenn ich meine Struktur und die OOP vergleiche kotze ich halber wenn ich meine sehe...
Kappier euch jetzt und starte wieder mit den Grundlegenden Sachen.
Danke euch allen <3
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
N Swing Kugel/Sphäre programmieren AWT, Swing, JavaFX & SWT 12
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
H LayoutManager RPG Programmieren, eigenes Spielfeld grafisch generieren aus Tileset AWT, Swing, JavaFX & SWT 18
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
T Wie kann man in java aufwendige grafiken programmieren AWT, Swing, JavaFX & SWT 1
M Nutzer interface Programmieren AWT, Swing, JavaFX & SWT 2
J Kleines Helikopterspiel programmieren AWT, Swing, JavaFX & SWT 2
R kleinen JPanelEditor programmieren AWT, Swing, JavaFX & SWT 3
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
2 Senso bzw SimonSays programmieren AWT, Swing, JavaFX & SWT 8
T Möchte Android-ähnlich programmieren AWT, Swing, JavaFX & SWT 7
R Eclipse GUI Programmieren AWT, Swing, JavaFX & SWT 8
I LookAndFeel HTML Auflösung - Online Editor programmieren AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Menü programmieren AWT, Swing, JavaFX & SWT 2
J Swing Landkarte mithilfe von Swing programmieren AWT, Swing, JavaFX & SWT 4
T Kleinen "Gui Builder" programmieren AWT, Swing, JavaFX & SWT 12
SexyPenny90 Wie Ball programmieren, der im 4 Eck rum fliegt AWT, Swing, JavaFX & SWT 7
I Rechner programmieren AWT, Swing, JavaFX & SWT 6
F UI Toolkit programmieren AWT, Swing, JavaFX & SWT 9
3 Eigenes Frame/Window programmieren AWT, Swing, JavaFX & SWT 2
S Desktop Programmieren AWT, Swing, JavaFX & SWT 2
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
C Swing Orderbook programmieren AWT, Swing, JavaFX & SWT 6
B Editor programmieren AWT, Swing, JavaFX & SWT 26
LittleJavaCup Suchmaschine programmieren (wie bei Windows) AWT, Swing, JavaFX & SWT 2
T AWT verschiedene Oberflächen programmieren AWT, Swing, JavaFX & SWT 5
vandread Swing Probleme mit "Game of Life" programmieren AWT, Swing, JavaFX & SWT 8
J Modelleisenbahn - Kontroll-Tafel programmieren AWT, Swing, JavaFX & SWT 3
L Regler in Java Programmieren AWT, Swing, JavaFX & SWT 12
I Preisvergleich programmieren AWT, Swing, JavaFX & SWT 4
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
J FAQ programmieren, welche Swing-Elemente AWT, Swing, JavaFX & SWT 7
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
C Zeitplaner: Terminblock programmieren AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben