Gå til innhold

Mitt første 2d platform spill - Trenger hjelp og innspill. :)


Anbefalte innlegg

Hei,

 

kommer sikkert til å spørre om masse i denne tråden så lar være å spesifere tittelen yttligere. :)

 

Her er spillet så langt:

 

 

//----------Importerer nødvendige bibliotek-------------//
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.awt.event.*;
//------------------------------------------------------//

public class MittVindu extends JPanel implements Runnable,KeyListener
{
private boolean running;							// Om programmet kjører eller ikke (Må være true så lenge animasjonen skal kjøre)
private int	 bredde = 400;					   // Bredden på vinduet (i piksler)
private int	 høyde = 200;						// Høyden på vinduet (i piksler)
private int	 x, y;							   // Variabler for posisjonen til spilleren
//private Image spiller = Toolkit.getDefaultToolkit().getImage(getClass().getResource("spiller.gif")); // laster inn bildet//
private Thread  animasjonsloop;					 // Setter animasjonsloopen
private JFrame  ramme;							  // Definerer rammen (eller noe sånt :P)
private boolean leftKey, rightKey, upKey, downKey;  // Tastene som styrer spilleren
private boolean lockjump;						   // Hindrer at man kan hoppe mens man er i luften

//***************************Konstruktør for vinduet MittVindu***********************//
public MittVindu(){
	ramme = new JFrame();								 // Instansierer JFrame
	ramme.getContentPane().add(this);					 // Legger dette panelet inn i rammen
	ramme.setTitle("Mitt vindu");						 // Setter tittelen på vinduet
	ramme.setSize(bredde,høyde);						  // Setter størrelsen på vinduet
	ramme.setVisible(true);							   // Gjør det synlig
	ramme.setBackground(Color.white);					 // Setter bakgrunnsfargen til svart
	ramme.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Sørger for at programmet slutter når man trykker på lukkeknappen
	animasjonsloop = new Thread(this);					// Lager tråden som skal oppdatere grafikken
	animasjonsloop.start();							   // starter tråden med utgangspunkt i run()-metoden
	addKeyListener(this);								  // Muligjør input
	requestFocus();										  // Krever fokus på vinduet
}

//***************************Metoden som tegner grafikken****************************//
public void paint(Graphics g){
	g.setColor(Color.black);
	g.fillRect(0,0,bredde,150);
	g.setColor(Color.white);
	g.fillOval(x, y, 20, 20);
	//g.drawImage(spiller,x,y,this);		  // Tegner spilleren//
}

/*
 * Metode som kalles hver gang en knapp trykkes
 */
public void keyPressed(KeyEvent e){
	if(e.getKeyCode()==KeyEvent.VK_LEFT) leftKey = true;
	if(e.getKeyCode()==KeyEvent.VK_RIGHT) rightKey = true;
	if(e.getKeyCode()==KeyEvent.VK_UP) upKey = true;
	if(e.getKeyCode()==KeyEvent.VK_DOWN) downKey = true;
}

/*
 * Metode som kalles hver gang en knapp slippes
 */
public void keyReleased(KeyEvent e){
	if(e.getKeyCode()==KeyEvent.VK_LEFT) leftKey = false;
	if(e.getKeyCode()==KeyEvent.VK_RIGHT) rightKey = false;
	if(e.getKeyCode()==KeyEvent.VK_UP) upKey = false;
	if(e.getKeyCode()==KeyEvent.VK_DOWN) downKey = false;
}

public void keyTyped(KeyEvent e){}

/*
 * Metode som flytter x og y- koordinatene
 */
public void update(){
	int xFart = 4;		 // fart i x-retning
	int yFart = -50;	   // fart i y-retning
	int gravitasjon = 2;   // gravitasjon

	if(leftKey)  x = x - xFart;
	if(rightKey) x = x + xFart;
	if(upKey && !lockjump){
		y = y + yFart;
		lockjump = true;
	}
	if (y <= 130){
		yFart = 0;
		y = y + gravitasjon;
	}
	else {
		lockjump = false;
	}

}

/*
* Stopper kjøringen av animasjonen ved å
* sette variabelen running til false.
*/
public void stop(){
   running = false;
}

/*
 * Metoden som kjøres når du kaller start()
 * på animasjonstråden
 */
public void run(){
	running = true;
	while ( running )
	{
		update();
		repaint();
		try
	{ 
			animasjonsloop.sleep(30);
			// Tråden sover i 30 millisekunder, vi må dessuten fange et unntak som denne metoden kaster 
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
	}
}

//***************************Main metoden for spillet********************************//
public static void main(String[] args){
	MittVindu vindu = new MittVindu();				  // Instansierer vinduet
}

}

 

 

Du finner det også i den vedlagte .zipfilen. Hele spillet er i en klasse og bruker ingen bilder så er bare å kompilere og kjøre.

 

Her kommer spørsmål 1:

 

Jeg prøver å få til hopping i spillet ("Pil opp" så hopper man), men jeg får det rett og slett ikke til. Mulig det bare er hjernetørke (håper det :)), men får ikke tak på prinsippet med fart og akselerasjon. Orker noen se på koden min og gi meg noen tips om hvordan jeg kan få til realistisk hopping og gravitasjon?

 

Her er den delen av koden som direkte har noe med hoppingen å gjøre:

 

 

 

private int	 y; 
private boolean lockjump;   

public void keyPressed(KeyEvent e){
	if(e.getKeyCode()==KeyEvent.VK_UP) upKey = true;
}

public void keyReleased(KeyEvent e){
	if(e.getKeyCode()==KeyEvent.VK_UP) upKey = false;
}

public void update(){
	int yFart = -50;	   // fart i y-retning
	int gravitasjon = 2;   // gravitasjon

	if(upKey && !lockjump){
		y = y + yFart;
		lockjump = true;
	}
	if (y <= 130){
		yFart = 0;
		y = y + gravitasjon;
	}
	else {
		lockjump = false;
	}

}

 

 

Jeg lagde lockjump for å hindre at man kan holde inne hoppeknappen, men det er jo selvsagt fra koden at når man trykker inn "Pil Opp" nå så setter den bare y-posisjonen til y - 50. Det er jo ikke hopping. :p Jeg vil at den da skal få en fart oppover som sakker av ettersom gravitasjonen påvirker den, men klarer rett og slett ikke få det til.

 

Og dersom noen har noen geniale sider/forum/communities med tutorials o.l angående spillprogrammering for nybegynnere og spesielt spillprogrammering i java så hadde det vært knall.

 

--

TwiiK

MittVindu.zip

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...