Spielerbewegung - jump and run

Java Neuling

Mitglied
Hey!
Ich möchte ein jump-and-run-Spiel progammieren.
Ich habe eigentlich überall eine Idee um alles umzusetzten, außer bei der Spielerbewegung.:bahnhof:
Es soll link und rechts sowie springen geben - alles mit Pfeiltatsten.
Ich hoffe jemand kann mir eine Denkhilfe geben.
Vielen Dank im Voraus! :D
 
G

Gast2

Gast
Du wirst dir vermutlich irgendwo nen KeyListener registrieren.
Wenn jetzt eine Taste gedrückt wird setzt du eine entsprechende boolean variable auf true, lässt der Spieler die Taste wieder los setzt du die variable wieder auf false.

in einer game loop fragst du dann nur die boolean variablen ab und bewegst dementsprechend deinen spieler

Schau dir vllt auch mal quaxli's spiele tutorial an
 

Java Neuling

Mitglied
Ich möchte, dass der "Spieler" sich nicht mehr bewegt, wenn man die Tasten nicht mehr drückt.
Desweiteren wird der Spieler tausendfach gezeichnet.

Klasse main:

Java:
import javax.swing.JFrame;


 public class main {
	 public	static	void main(String args[]){
			 JFrame f = new JFrame();
			 Spieler s = new Spieler();
			 f.add(s);
			 f.setVisible(true);
			 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			 f.setSize(800,600);
	 }
	 
 }

Klasse Spieler:

Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;

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



public class Spieler extends JPanel implements ActionListener, KeyListener{
	
	
	Timer t = new Timer(5,this);
	double x = 0, y = 0, velx = 0, vely = 0;
	boolean up; 
	boolean down;
	boolean left;
	boolean right;
	
	



		public Spieler()
		{

		t.start();
		addKeyListener(this);
		setFocusable(true);
		setFocusTraversalKeysEnabled(true);
		}
		
		public	void	paintComponent(Graphics g){
			super.paintComponents(g);
			Graphics2D g2 = (Graphics2D) g;
			g2.fill(new Ellipse2D.Double(x,y,40,40));
			
		}
		public	void	actionPerformed(ActionEvent e){
			repaint();
			x+= velx;
			y+= vely;
			
			if(up){
				vely=-1.5;
				velx=0;
			}
			
			if(down){
				vely=1.5;
				velx=0;
			}
			
			if(left){
				vely=0;
				velx=-1.5;
			}
			
			if(right){
				vely=0;
				velx=1.5;
			}

			
		}

		
		public void keyPressed(KeyEvent e){
			int code = e.getKeyCode();


			if(code == KeyEvent.VK_UP)
			{
				up=true;
				
			}
			if(code == KeyEvent.VK_DOWN)
			{
				down=true;
			}
			if(code == KeyEvent.VK_LEFT)
			{
				left=true;
			}
			if(code == KeyEvent.VK_RIGHT)
			{
				right=true;
			}


		}
		
		public	void	keyTyped(KeyEvent e){}
		public	void	keyReleased(KeyEvent e){
			
			if(e.getKeyCode()==KeyEvent.VK_UP){
				up=false;
			}
			if(e.getKeyCode()==KeyEvent.VK_DOWN){
				down=false;
			}
			if(e.getKeyCode()==KeyEvent.VK_LEFT){
				left=false;
			}
			if(e.getKeyCode()==KeyEvent.VK_RIGHT){
				right=false;
			}
		}
		

	        
	}
 
G

Gast2

Gast
Java:
super.paintComponents(g);
da muss schonmal das s weg :)
 

Java-Freak

Bekanntes Mitglied
schau dir mal das Tutorial von Quaxli an...
ich hab selbst damit die spieleprogrammierung angefangen und es war sehr hilfreich...
da wird ein kleines spiel ausführlich erklärt zusammengebastelt und ein bisschen größeres etwas schneller...
ist wirklich gut wenn noch nie was mit spieleprogrammierung gemacht hat...
ich habe mein erstes spiel auf den rahmen aufgebaut und finde er ist für spiel in der gößenordnung echt nicht schlecht...
zu deinen code:
-du erzeugst jedesmal in des paintComponent ein neues Graphics Object, das ist nicht sehr geschickt, da diese sehr oft aufgerufen wird. um das zu erreichen was du willst würde ich
Java:
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.fillArc((int)x,(int) y, 40, 40,0,360);

	}
schreiben.
-ich würde für den Timer eher 10-15 milisekunden nehmen, das reicht völlig aus und macht das spiel nicht so schwerfällig
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Auch das könnte man ergooglen, aber...
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 

Java Neuling

Mitglied
Erstmal Danke!

Aber hat denn keiner eine Lösung für das Problem mit dem Weiterlaufen des Spielers?


Edit:

Habe es selber hinbekommen!

Das hier hat gefehlt:

Java:
if(!right && !left && !up && !down){
				vely=0;
				velx=0;
		
			}
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben