Archief - [prog]java grafisch

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

schop aars

Legacy Member
Hoe kunt ge met threads een balletje doen bewegen op het scherm?
en is het mogelijk om verschillende threads tegelijk iets te doen bewegen?(bv. een balletje en een voetballer)

.Acku.

Legacy Member
Ge gaat toch zelf iets van moeite moeten doen voor ik weer iets voor de honderste keer ga uitleggen :)
Geef minstens een probeersel.

schop aars

Legacy Member
thx voor de link kzal er wat met experimenteren en als het iets word zal ik mijn probeersel hier is posten

schop aars

Legacy Member
Ball.java:
Code:
import java.awt.*;

class Ball extends Thread
{
	private boolean ismoving;
	private Graphics g;
	private int x =7;
	private int y =0;
	private int xChange =7;
	private int yChange =2;
	private int diameter = 10;
	private int rectLeftX = 0, rectRightX = 500;
    private int rectTopY = 0, rectBottomY = 500;


	public Ball(Graphics gr)
	{
		g=gr;
		ismoving = true;
	}

	public void end()
	{
		ismoving = false;
	}

	public void run()
	{

		g.drawRect(rectLeftX, rectTopY,
		                   rectRightX - rectLeftX, rectBottomY - rectTopY);

		        while (ismoving)
		        {
		            g.setColor(Color.red);
					g.fillOval(x,y,diameter,diameter);

		            if (x + xChange <= rectLeftX)
		                xChange = -xChange;
		            if (x + xChange >= rectRightX)
		                xChange = -xChange;

		            if (y + yChange <= rectTopY)
		                yChange = -yChange;
		            if (y + yChange >= rectBottomY)
		                yChange = -yChange;

		            x = x + xChange;
		            y = y + yChange;

		            try
		            {
		                Thread.sleep(50);
		            }
		            catch (InterruptedException e)
		            {
		                System.err.println("sleep exception");
		            }
		        }
		}
	}

CkBreakout.java:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CkBreakout extends JFrame
{
	public void main(String args[])
	{
		CkBreakout application = new CkBreakout();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		startGame();
	}
	public CkBreakout()
	{
		super("CkBreakout");

		setSize(860,660);
		setVisible(true);
	}
	public void startGame()
	{
		Graphics g;
;
		Ball ball= new Ball(g);
		ball.start();
	}


}

fout:
Code:
CkBreakout.java:24: variable g might not have been initialized
		Ball ball= new Ball(g);
                                    ^
1 error

Bewerking afgesloten het fout-code 1

.Acku.

Legacy Member
Om dan een NullPointer te krijgen wanneer je g gaat gebruiken want:

Graphics g;
Ball ball= new Ball(g);

Geeft gewoon null mee.
Probeer:

Graphics g = getGraphics();
Ball ball= new Ball(g);

schop aars

Legacy Member
k thx der zaten blijkbaar nog wa fouten in mijn code maar die heb ik der al uit gehaald.

schop aars

Legacy Member
k ik heb ook al een menutje toegevoegd en als ge op play drukt dan ziet ge da balleke heen en weer bewegen maar hij laat de vorige afbeelding van da balleke ook staan.
enige oplossing hiervoor?

ball.java:
Code:
 import java.awt.*;

class Ball extends Thread
{
	private boolean ismoving;
	private Graphics g;
	private int x =57;
	private int y =50;
	private int xChange =7;
	private int yChange =2;
	private int diameter = 10;
	private int rectLeftX = 50, rectRightX = 500;
    private int rectTopY = 50, rectBottomY = 500;


	public Ball(Graphics gr)
	{
		g=gr;
		ismoving = true;
	}

	public void end()
	{
		ismoving = false;
	}

	public void run()
	{

		g.drawRect(rectLeftX, rectTopY,
		                   rectRightX - rectLeftX, rectBottomY - rectTopY);

		        while (ismoving)
		        {
		            g.setColor(Color.red);
					g.fillOval(x,y,diameter,diameter);

		            if (x + xChange <= rectLeftX)
		                xChange = -xChange;
		            if (x + xChange >= rectRightX)
		                xChange = -xChange;

		            if (y + yChange <= rectTopY)
		                yChange = -yChange;
		            if (y + yChange >= rectBottomY)
		                yChange = -yChange;

		            x = x + xChange;
		            y = y + yChange;

		            try
		            {
		                Thread.sleep(50);
		            }
		            catch (InterruptedException e)
		            {
		                System.err.println("sleep exception");
		            }
		        }
		}
	}
Code:
 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CkBreakout extends JFrame
{
	private JLabel score;

	public static void main(String args[])
	{
		CkBreakout application = new CkBreakout();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

	public CkBreakout()
	{
		super("CkBreakout");


		JMenu ck = new JMenu("CkBreakout");
		ck.setMnemonic('k');

		JMenuItem play = new JMenuItem("Play");
		play.setMnemonic('P');
		play.addActionListener(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					startGame();
				}
			}
			);
		ck.add(play);


		JMenuBar bar = new JMenuBar();
		setJMenuBar(bar);
		bar.add(ck);



		setSize(1000,700);
		setVisible(true);

	}
	public void startGame()
	{
		Graphics g= getGraphics();

		Ball ball= new Ball(g);
		ball.start();
	}


}

meeneemchinees

Legacy Member
Je wist ook nooit het oude balletje. OK, dat wordt ook niet gedaan in het voorbeeld van Suicide Monkey, maar daar wordt de repaint method van de applet gebruikt.

.Acku.

Legacy Member
public void run()
{
g.fillRect(rectLeftX, rectTopY,rectRightX - rectLeftX, rectBottomY - rectTopY);

g.drawRect(rectLeftX, rectTopY,rectRightX - rectLeftX, rectBottomY - rectTopY);

Zou de truc wel eens kunnen doen, je doet maw gewoon eerst een clearscreen.

meeneemchinees

Legacy Member
.Acku. zei:
public void run()
{
g.fillRect(rectLeftX, rectTopY,rectRightX - rectLeftX, rectBottomY - rectTopY);

g.drawRect(rectLeftX, rectTopY,rectRightX - rectLeftX, rectBottomY - rectTopY);

Zou de truc wel eens kunnen doen, je doet maw gewoon eerst een clearscreen.

... Als je de fillRect en drawRect in de while lus zet tenminste.
Sorry Acku :p

schop aars

Legacy Member
hmm kmoen ier duidelijk toch nog wa over leren voor dannek da zal kunnen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan