我的sprite不能自动换帧
我有一个128×192的PNG图,里面有16个小飞碟,4行4列,第一行是向下走的连续的动作小飞碟,第2行向左,3行右,4行上,然后我写了下面的这样的代码希望当按下上下左右键会分别调用相应的行作为他们的帧的队列。
代码如下:
//定义四个数组存储相应的帧队列
private int[] Up={12,13,14,15};
private int[] Down={0,1,2,3};
private int[] Left={4,5,6,7};
private int[] Right={8,9,10,11};
…… ……
//这个方法让小飞碟的动作响应不同的按键
private void update() {
// Process user input to control the UFO speed
int keyState = getKeyStates();
int preState=0;
if ((keyState & LEFT_PRESSED) != 0){
ufoXSpeed--;
if(preState!=keyState){
ufoSprite.setFrameSequence(Left);
}
ufoSprite.nextFrame();
preState=keyState;
}
else if ((keyState & RIGHT_PRESSED) != 0){
ufoXSpeed++;
if(preState!=keyState){
ufoSprite.setFrameSequence(Right);
}
ufoSprite.nextFrame();
preState=keyState;
}
if ((keyState & UP_PRESSED) != 0 ){
ufoYSpeed--;
if(preState!=keyState){
ufoSprite.setFrameSequence(Up);
}
ufoSprite.nextFrame();
preState=keyState;
}
结果运行的结果是我的飞碟只能运行第一帧的动作。。后面的连续的动作都不能。。为什么啊?
------解决方案--------------------不要每次都setFrameSequence
------解决方案--------------------.nextFrame();只能显示下1帧的图片
你要把.nextFrame();放在run()方法中 用线程才能实现动画效果.``
我也不知道这是为什么,和它API文件上写的有点不一样,我1开始做动画的时候跟LZ一样结果没有动画效果,用了线程以后才有
------解决方案--------------------//帮你写一个向上移动的,其他都一样
int st = getKeyStates();
if ((st & UP_PRESSED) != 0) {
ufoSprite.setFrameSequence(Up);
for (int i = 0; i < Up.length; i++) {
ufoSprite.setPosition(ufoSprite_x, ufoSprite_y-= 5);
ufoSprite.nextFrame();
LayerManager.paint(g, 0, 0);
flushGraphics();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}}
------解决方案--------------------同上
你的代码没错
关键是你如何调用 update 这个方法的
------解决方案--------------------