gpt4 book ai didi

java - 如何阻止 JApplet 中的运动图像闪烁

转载 作者:行者123 更新时间:2023-12-01 14:28:43 24 4
gpt4 key购买 nike

三年来我第一次成功创建了一个(基本的)动画 JApplet,但我对图像移动时闪烁感到恼火。 Timer 对象使图像移动,我的私有(private)内部类“TimerListener”负责移动图像的动画运动。

这是我的TimerListener类的代码,我认为这个问题也许可以解决:

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
}

private class TimerListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {

//Following if-else manipulates Y coordinate
if (goingUp) {
if (yCoord > minY) {
yCoord -= move;
}
else {
goingUp = false;
}
} else {
if (yCoord < (getContentPane().getHeight() - (smileyFace.getIconHeight()+ Y_OFFSET))) {
yCoord += move;
}
else {
goingUp = true;
}
}

//Following if-else manipulates X coordinate
if (goingSideways) {
if (xCoord > 0) {
xCoord -= move;
}
else {
goingSideways = false;
}
} else {
if (xCoord < (getContentPane().getWidth() - (smileyFace.getIconWidth() + X_OFFSET))) {
xCoord += move;
}
else {
goingSideways = true;
}
}

repaint();
}
}

如果有帮助的话,这是我的 JApplet 的屏幕截图 - 在这种情况下,巨魔的脸应该在黑色区域中移动,并在击中侧面时从侧面弹起:

enter image description here

对于那些想要运行和测试 JApplet 的人,您可以从 https://github.com/rattfieldnz/Java_Projects/tree/master/JAppletAnimation 获取 Netbeans 项目。 .

最佳答案

感谢用户“arynaq”,我已经解决了我的问题。我采用以下绘制方法:

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
}

...进入扩展 JPanel 的内部类(注意我如何将“paint”更改为“paintComponent”):

class ImagePanel extends JPanel
{

public ImagePanel()
{
setBackground(Color.BLACK);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(smileyFace.getImage(), xCoord, yCoord, this);
}

@Override
public void setBackground(Color bg) {
super.setBackground(bg); //To change body of generated methods, choose Tools | Templates.
}


}

...然后通过它的 init() 方法将其添加到我的 JApplet 中(我不确定调用 JApplet 的构造函数是否正确...):

@Override
public void init() {

smileyFace = new ImageIcon("images/happyFace.png");
**add(new ImagePanel());**
timerDelay = 10;
timer = new Timer(timerDelay, new TimerListener());
timer.start();

//getContentPane().setBounds(0, 0, CONTENTPANE_WIDTH, CONTENTPANE_HEIGHT);
getContentPane().setBackground(Color.BLACK);

//maxY = getContentPane().getHeight();
minY = 0;

xCoord = 0;
yCoord = 0;
move = 2;

}

您可以通过克隆my GitHub JApplet project来看到它正在运行并在 NetBeans 中运行它:)。

关于java - 如何阻止 JApplet 中的运动图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com