[java] pacman mond laten bewegen.

Pagina: 1
Acties:

  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
ik wil dus graag een pacman over mijn scherm laten lopen. en terwijl hij loopt moet zijn mond "eet" bewegingen maken.

Ik ben hier al een aantal dagen mee aan het proberen. Wat ik onder andere heb geprobeert is verschillende timers, en sleep enzo gebruiken. zodat ik zijn hoofd compleet rond kan maken nadat hij en stap op het veld heeft gezet. moet ik mijn volledige code aanpassen? of is er een simpele oplossing die google en verschillende site zijn vergeten te vermelden.

dit is wat ik nu heb: een pacman die over mijn scherm gaat. dit werkt prima. Alleen ik krijg zijn mond maar niet in beweging. Wie kan me helpen ?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
Pacman.java
Created 21-11-06
time 12:33AM
Copyright Ruler-Nrg
*/

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class PacMan extends JPanel {

public static int size = 100;
int lastX, lastY;
int canvasWidth, canvasHeight;
Graphics2D g2;

Area pacman;
int sizex, sizey;
double speedx, speedy;
AffineTransform anim;
AnimationThread thread;

class AnimationThread extends Thread
{
public void run()
{
while(true)
{
animate(); repaint(); try
{
sleep(50);
}
catch(InterruptedException e){}
}
}
}

public PacMan() 
{
super(new BorderLayout());

int size = 100;
Ellipse2D.Double head = new Ellipse2D.Double(0,0,size, size);
Ellipse2D.Double eye = new Ellipse2D.Double(size/2 -1,size/5 -1, size/10, size/10);

GeneralPath mouth = new GeneralPath();
mouth.moveTo(size,size/4);
mouth.lineTo(size/8,size/2);
mouth.lineTo(size,size*3/4);
mouth.closePath();
pacman = new Area(head);
pacman.subtract(new Area(eye));
pacman.subtract(new Area(mouth));

speedx =3; speedy =2;

anim = AffineTransform.getTranslateInstance(speedx, speedy);
thread = new AnimationThread();
}

public void paintComponent(Graphics g)
{
Dimension d = getSize();
canvasWidth = d.width;
canvasHeight = d.height;

g2 = (Graphics2D)g;
g2.fill(new Rectangle.Double(0,0,sizex,sizey));
g2.setPaint(Color.yellow);
g2.fill(pacman);
g2.setPaint(Color.black);
g2.draw(pacman);
}

private void animate()
{
sizex = getWidth();
sizey = getHeight();

pacman.transform(anim);
Rectangle bounds = pacman.getBounds();
Point location = bounds.getLocation();

if(location.x > canvasWidth -100) anim = AffineTransform.getTranslateInstance(-speedx,anim.getTranslateY());
if(location.x<0) anim = AffineTransform.getTranslateInstance(speedx,anim.getTranslateY());
if(location.y>canvasHeight -100)anim = AffineTransform.getTranslateInstance(anim.getTranslateX(), -speedy);
if(location.y<0)anim = AffineTransform.getTranslateInstance(anim.getTranslateX(), speedy);
}

public static void main(String[] args)
{
JFrame frame = new JFrame("drawing");
frame.setSize(600,600);
PacMan canvas = new PacMan();
frame.setContentPane(canvas);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.setVisible(true);
canvas.thread.start();
}
}

[ Voor 6% gewijzigd door Ruler-Nrg op 22-11-2006 14:00 . Reden: even de codetags toegevoegd :) ]

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Gebruik even deze tags
code:
1
2
3
[code=java]
code hier
[/code]

  • Ruler-Nrg
  • Registratie: Oktober 2006
  • Laatst online: 09:44
Depress schreef op woensdag 22 november 2006 @ 13:47:
Gebruik even deze tags
code:
1
2
3
[code=java]
code hier
[/code]
sorry. Dank

Dell Precision, T9550, 8gb, 64GB ssd, 1920x1200RGB led.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Tja, dan zul je het driehoekje aan moeten passen en de ene keer groter en de andere keer kleiner meoten maken. Wat heb je al geprobeerd en waarom lukte dat niet. Ik mis een berg informatie in je startpost. Het is niet de bedoeling om hier een lap code te dumpen met daarbij de melding "maar dit moet het ook doen". Lees ook even de quickstart door.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'