在 Java 小程序的循环期间输入键以用于动画目的
Posted
技术标签:
【中文标题】在 Java 小程序的循环期间输入键以用于动画目的【英文标题】:Inputting a Key during a Loop in Java applet for animation purposes 【发布时间】:2014-10-31 05:29:48 【问题描述】:我正在学习如何以游戏的形式使用 Java 制作 Applet。在游戏中,我在中心绘制了一个角色精灵,并在玩家按下 w a s d 时移动。
是这样的:
public game extends applet implements KeyListener
int x, y;
URL url;
Image image;
public void init()
x = getSize().width/2;
y = getSize().height/2;
url = new URL(getCodeBase());
image = getImage(url, "player.gif"); //take note that this is a still image
addKeyListener(this);
public void paint(Graphics g)
g.drawImage(image, x, y, 32, 32, this); //the size of the image is 32x32
public void KeyPressed(arg0)
char c = arg0.getKeyChar();
switch(c)
case 'w':
y -= 10;
break;
/*And so on. You guys know how it works.*/
repaint();
我的问题是,当用户不按任何东西时,角色精灵看起来很呆板。我想要做的是使 Image 成为一个图像数组,并通过像这样在paint中循环数组来放置一个简单的图像动画:
public void paint(Graphics g)
for(int i = 0; ; i++)
g.drawImage(image[i], x, y, 32, 32, this);
if(i == image.size() - 1) i = 0;
但是,如果我这样做,我将无法再获得在用户想要移动时会激活的 KeyEvent。我的问题是:我将如何制作,以便我的角色在程序“空闲”(即用户没有按下任何东西)时制作动画,同时仍然保持接收 KeyEvents 的能力(例如,当玩家键入时移动在 w、a、s 或 d 中,然后在重新绘制后继续空闲动画)?
提前致谢。
PS。我仍然是 Java 的初学者,如果我的代码不是很好,很抱歉。欢迎任何建议。
【问题讨论】:
1.欢迎任何建议 ---> Oracle tutorial - 2D Graphics, 2. 使用 Swing instead of AWT, 3. 不要使用 KeyListener, use KeyBindings, 4. short_cut 5.不要尝试在paint
方法中执行动画
【参考方案1】:
也许你会给自己一个新的类,比如 InterestingCharacter,它可以循环通过任何 N 个状态(对应于你的 N 个图像)。您显然不能让任何绘制方法无限运行,但如果您的 InterestingCharacter 可以将自己呈现在当前状态,那么您可能会对此有所了解。也许这个 InterestingCharacter 知道它处于什么状态,然后由其他对象管理渲染就足够了。如果 InterestingCharacter 可以告诉您它的状态已更改,因此需要再次呈现,这会有所帮助吗?如果是这样,您可以实现 Observer pattern 以便观察角色并让您的游戏成为观察者。
我认为诀窍是将问题分解为几个具有适当职责的类——理想情况下,一个类应该有一个职责,并且它的每个方法都应该做一件事。
只是一些可以帮助您前进的想法。尝试一下,看看效果如何。希望对您有所帮助!
【讨论】:
【参考方案2】:您需要使您的应用程序多线程,以便绘画在单独的线程中运行。
否则你会在等待下一个键时阻止绘画。
不过,这对您的代码来说并不是一个微不足道的更改。
【讨论】:
这对我的目的有所帮助。谢谢!以上是关于在 Java 小程序的循环期间输入键以用于动画目的的主要内容,如果未能解决你的问题,请参考以下文章