Variablen in Klassen übergeben

Rightclickz

Grünschnabel
Hallo zusammen,

ich bin noch recht frisch bei Java und komme gerade nicht weiter.
Ich versuch mich gerade an einem Jump N Run und möchte gerade die Bewegung in einer anderen Klasse als die gui haben in der das Hintergrundbild sich mitbewegen soll.

Diese Klasse wollte ich jetzt aufteilen:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;


@SuppressWarnings("serial")
public class gui extends JPanel implements ActionListener {

    Timer time;
    Image img;
    int key;
    int x_background;
    int scroll = new move().move;
  
  
    public gui() {
      
        key = 0;
        scroll = 0;
        setFocusable(true);
        ImageIcon bg = new ImageIcon("src/img/background.png");
        img = bg.getImage();
        addKeyListener(new ActionListener());
      
        time = new Timer(5,this);
        time.start();
    }
  
    public void actionPerformed(ActionEvent e) {
      
        move();
        repaint();
    }
  
    public void paint(Graphics g){
        
        super.paint(g);
        Graphics2D f2 = (Graphics2D)g;
        
        if (x_background <= -1077) {
            x_background += 1077;
        }
          
        f2.drawImage(img, x_background, 0, null);
        f2.drawImage(img, x_background + 1077, 0, null);
      
        if (x_background >= -1077) {
            x_background -= 1077;
        }
      
        System.out.println(x_background);
    }
  
    public void move() {
      
        x_background += scroll;
    }

    private class ActionListener extends KeyAdapter{
      
        public ActionListener() {
          
        }
      
        public void keyPressed(KeyEvent e) {
          
            key = e.getKeyCode();
          
            if (key == KeyEvent.VK_LEFT) {
              
                scroll = 2;
            }
          
            if (key == KeyEvent.VK_RIGHT) {
              
                scroll = -2;
            }
        }
      
        public void keyReleased(KeyEvent e) {
          
            key = e.getKeyCode();
          
            if ((key == KeyEvent.VK_LEFT) || (key == KeyEvent.VK_RIGHT)) {
              
                scroll = 0;
            }
        }
    }
}


In diese:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;


@SuppressWarnings("serial")
public class gui extends JPanel implements ActionListener {

    Timer time;
    Image img;
    int key;
    int x_background;
    int scroll = new move.scroll();
  
  
    public gui() {
      
        key = 0;
        scroll = 0;
        setFocusable(true);
        ImageIcon bg = new ImageIcon("src/img/background.png");
        img = bg.getImage();
      
        time = new Timer(5,this);
        time.start();
    }
  
    public void actionPerformed(ActionEvent e) {
      
        move();
        repaint();
    }
  
    public void paint(Graphics g){
        
        super.paint(g);
        Graphics2D f2 = (Graphics2D)g;
        
        if (x_background <= -1077) {
            x_background += 1077;
        }
          
        f2.drawImage(img, x_background, 0, null);
        f2.drawImage(img, x_background + 1077, 0, null);
      
        if (x_background >= -1077) {
            x_background -= 1077;
        }
      
        System.out.println(x_background);
    }
  
    public void move() {
      
        x_background += scroll;  /* Hier will ich die Variable Scroll aus der anderen Klasse bekommen*/
    }
}


und die 2te in der ich die Tastenanschläge aufnehme:
Java:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class move extends KeyAdapter {
  
    int key;
    int move;
  
    public void keyPressed(KeyEvent e) {
          
        key = e.getKeyCode();
          
        if (key == KeyEvent.VK_LEFT) {
              
            move = 2;
        }
          
        if (key == KeyEvent.VK_RIGHT) {
              
            move = -2;
        }
    }
      
    public void keyReleased(KeyEvent e) {
          
        key = e.getKeyCode();
          
        if ((key == KeyEvent.VK_LEFT) || (key == KeyEvent.VK_RIGHT)) {
              
            move = 0;
        }
    }
  
    public int scroll() {
      
        return move;
    }
}

Ich hab mir einige Sachen durchgelesen aber das mit dem übertragen hat alles nicht geklappt.

Hoffe auf Hilfe
Gruß Rightclickz
 
Wenn ich das richtig verstehe, willst du folgendes tun.
  • ActionListener auslagern
  • Ausgelagerter ActionListener ändert die die Position

Das ist relativ einfach. Auslagner tust du den ActionListener folgendermaßen

GUI-Klasse
Java:
   private Move move = new Move();

   public Gui() {
       addKeyListener(move);
   }
In deiner GUI implementierst du keinen ActionListener, nur in der Move.

Desweiteren setzt du einfach private Variablen der Position und setzt bzw kriegst die Werte mittels Getter/Setter. Bei weiteren Fragen oder Unklarheiten, ich bin hier.

Mit freundlichen Grüßen
Halfbax
 
Zurück