Java Applet repaint();

Status
Niet open voor verdere reacties.

roeney12

Gebruiker
Lid geworden
23 jul 2008
Berichten
105
Ik ben een amateur programmeerder en ik ben een game aan het maken in Java. In het spel zijn twee spelers een vierkantje.
Ik heb een Player.java gemaakt waarin de beweging is geprogrammeerd. Daarnaast heb ik een StartingClass.java waarin alles wordt samengevoegd.

In de StartingClass.java worden twee vierkantjes (rectangle) gemaakt (player1Rect en player2Rect). Het is de bedoeling dat deze de Player (waarvan er twee zijn (player1 en player2) volgen.
Het probleem is dat de vierkantjes niet opnieuw 'gepaint' worden. Als ik de code onder paint(); kopieer naar update(); tekent ie wel opnieuw, maar blijft de vorige staan.
Ik hoop dat het een beetje duidelijk is. Hieronder volgt uiteraard de code.

Waarschijnlijk zitten er nog een heleboel andere foutjes of onnodige dingen in, dus verbeter me daarin ook alstublieft! :)

Alvast bedankt,
Roeney

StartingClass.java:
Code:
package coopgame;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;

public class StartingClass extends Applet implements Runnable, KeyListener {
	
	//Game variables
		public int fps = 60;
		public URL base;
				
		public static int screenWidth = 800;
		public static int screenHeight = 480;
	
	//Platform variables
		public Rectangle platformRect;
				
		public static int platformHeight = 50;

	//Players	
		public static int playerWidth = 20;
		public static int playerHeight = playerWidth;
				
		public Player player1, player2;
		
		public Rectangle player1Rect;
		public Rectangle player2Rect;
			
	@Override
	public void init() {
		setSize(screenWidth, screenHeight);
		setBackground(Color.BLACK);
		setFocusable(true);
		addKeyListener(this);
		Frame frame = (Frame) this.getParent().getParent();
		frame.setTitle("Co-op Game");
		
		try {
			base = getDocumentBase();
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}
	
	@Override
	public void start() {
		player1 = new Player();
		player2 = new Player();
		player1Rect = new Rectangle(player1.getCenterX() - (playerWidth/2), player1.getCenterY() - (playerHeight/2), playerWidth, playerHeight);
		player2Rect = new Rectangle(player2.getCenterX() - (playerWidth/2), player2.getCenterY() - (playerHeight/2), playerWidth, playerHeight);
				
		Thread thread = new Thread(this);
		thread.start();
	}
	
	@Override
	public void stop() {
		// TODO Auto-generated method stub
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
		
	@Override
	public void run() {
		while(true){
			player1.update();
			player2.update();			
			
			repaint();
			try {
				Thread.sleep(1000/fps);
			} 
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}

	@Override
	public void update(Graphics g) {
		
	}
	
	@Override
	public void paint(Graphics g){
		g.setColor(Color.GREEN);
		g.fillRect(player1.getCenterX() - (playerWidth/2), player1.getCenterY() - (playerHeight/2), playerWidth, playerHeight);
		
		g.setColor(Color.BLUE);
		g.fillRect(player2.getCenterX() - (playerWidth/2), player2.getCenterY() - (playerHeight/2), playerWidth, playerHeight);
		
		g.setColor(Color.RED);
		g.drawString("x-coordinate:" + player1.getCenterX(), screenWidth/2, 10);
		g.drawString("y-coordinate:" + player1.getCenterY(), screenWidth/2, 25);
	}
	
	@Override
	public void keyPressed(KeyEvent e){
			switch (e.getKeyCode()){
			
		//Player 1 Keys
			case KeyEvent.VK_LEFT:
				player1.moveLeft();
			break;
			
			case KeyEvent.VK_RIGHT:
				player1.moveRight();
			break;
			
			case KeyEvent.VK_UP:
				if (!player1.isJumped()){
					player1.jump();
				} 
			break;
			
		//Player 2 Keys
			case KeyEvent.VK_A:
				player2.moveLeft();
			break;
			
			case KeyEvent.VK_D:
				player2.moveRight();
			break;
			
			case KeyEvent.VK_W:
				if (!player2.isJumped()){
					player2.jump();
				} 
			break;
			}
	} 
	
	@Override
	public void keyReleased(KeyEvent e){
			switch (e.getKeyCode()){
		//Player 1 Keys
			case KeyEvent.VK_LEFT:
				player1.stop();
			break;
			
			case KeyEvent.VK_RIGHT:
				player1.stop();
			break;
			
		//Player 2 Keys
			case KeyEvent.VK_A:
				player2.stop();
			break;
			
			case KeyEvent.VK_D:
				player2.stop();
			break;
			}
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}

Player.java:
Code:
package coopgame;

import java.awt.*;

public class Player {
	private int centerX = 100;
	private int centerY = 382;
	private boolean jumped = false;

	private int speedX = 0;
	private int speedY = 1;

	public void update() {
		
		// Moves Character or Scrolls Background accordingly.
		centerX += speedX;
		
		
		// Updates Y Position

		if (centerY + speedY >= 382) {
			centerY = 382;
		}else{                       
                     centerY += speedY;
                }

		// Handles Jumping
		if (jumped == true) {
			speedY += 1;

			if (centerY + speedY >= 382) {
				centerY = 382;
				speedY = 0;
				jumped = false;
			}

		}

		// Prevents going beyond X coordinate of 0
		if (centerX + speedX <= StartingClass.playerWidth) {
			centerX = StartingClass.playerWidth + 1;
		}
		if (centerX + speedX >= StartingClass.screenWidth + StartingClass.playerWidth) {
			centerX = StartingClass.screenWidth - StartingClass.playerWidth - 1;
		}
	}

	public void moveRight() {
		speedX = 6;
	}

	public void moveLeft() {
		speedX = -6;
	}

	public void stop() {
		speedX = 0;
	}

	public void jump() {
		if (jumped == false) {
			speedY = -15;
			jumped = true;
		}

	}

	public int getCenterX() {
		return centerX;
	}

	public int getCenterY() {
		return centerY;
	}

	public boolean isJumped() {
		return jumped;
	}

	public int getSpeedX() {
		return speedX;
	}

	public int getSpeedY() {
		return speedY;
	}

	public void setCenterX(int centerX) {
		this.centerX = centerX;
	}

	public void setCenterY(int centerY) {
		this.centerY = centerY;
	}

	public void setJumped(boolean jumped) {
		this.jumped = jumped;
	}

	public void setSpeedX(int speedX) {
		this.speedX = speedX;
	}

	public void setSpeedY(int speedY) {
		this.speedY = speedY;
	}
}
 
Ik heb het al opgelost! (Nouja, met behulp van een tutorial.. :))

Ik heb deze variabelen toegevoegd:
Code:
private Image image;
private Graphics second;
public URL base;

en onder update(); het volgende gezet:
Code:
if (image == null) {
			image = createImage(this.getWidth(), this.getHeight());
			second = image.getGraphics();
		}

		second.setColor(getBackground());
		second.fillRect(0, 0, getWidth(), getHeight());
		second.setColor(getForeground());
		paint(second);

		g.drawImage(image, 0, 0, this);
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan