Продолжение вопроса причины неотображения анимированного спрайта?
Разобравшись с концептом отображения анимированных спрайтов по версии Sun программистов и предприняв попытку реализации анимированного спрайта, получил на экран только первый кадр анимированного спрайта в виде статичной неанимированной картинки, вместо ожидаемого анимированного изображения. С учётом того, что программный код чист и Eclipse ошибок не выдаёт я прихожу в недоумение по случаю причины отсутствия ожидаемого результата согласно плану реализации данной задачи. И ставлю вопрос в чём же дело?
С уважением
MidletUser
Программный код реализации задачи
Спрайт из 8 кадров, горизонтальное расположение, размером 184/8 х 28 для каждого кадра, соответственно.
import java.io.IOException;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.*;
public class MyMidlet extends MIDlet {
Display display;
MyGameCanvas mygamecanvas;
public MyMidlet() throws IOException{
display = Display.getDisplay(this);
mygamecanvas = new MyGameCanvas();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
mygamecanvas.setFullScreenMode(true);
display.setCurrent(mygamecanvas);
// TODO Auto-generated method stub
}
}
|
import java.io.IOException;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
public class MyGameCanvas extends GameCanvas implements Runnable {
Graphics g;
boolean working;
Thread thread;
LayerManager layermanager;
Sprite mysprite;
Image image2;
public MyGameCanvas() throws IOException{
super(true);
try{
image2 = Image.createImage("/sprite1.png");
mysprite = new Sprite( image2, 184/8, 28 );
mysprite.defineReferencePixel(0, 0);
mysprite.setRefPixelPosition(0, 0);
layermanager = new LayerManager();
working = true;
thread = new Thread(this);
thread.start();
}
catch(Exception e){
System.out.println("Cannot read PNG Graphic");
}
}
public void run() {
g = getGraphics();
while(working){
int [] sequence = {0,1,2,3,4,5,6,7};
mysprite.setFrameSequence(sequence);
mysprite.nextFrame();
flushGraphics();
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// TODO Auto-generated method stub
}
public void paint(Graphics g){
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(), getHeight());
// Draw the Sprite
layermanager.append(mysprite);
layermanager.paint(g, 0, 0);
}
}
|