開始時,我創建了一個新的FPSAnimator(drawable,FPS,true); FPSAnimator啓動後,可以加速或減速(即更改動畫的FPS)動畫速度嗎?更改FPSAnimator的每秒幀數
2
A
回答
-1
FPSAnimator有一個名爲.setFPS()的方法。它在動畫師已經啓動後有效。這裏是你的link。
編輯:
當動畫開始,不可能再改變FPS和一些方法,例如this不工作或我的編碼的水平是不夠的,使用它。
所以在這裏,我將給你一個關於如何改變FPS後的小Java例子,第一個啓動動畫師。讓我們假設我們有一個簡單的蛇遊戲與OpenGL(libjogl),你的主要方法是;
public static void main(String[] args) {
GLCanvas canvas = new GLCanvas();
Frame frame = new Frame("Snake");
frame.setSize(500, 500);
frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Animator animator = new FPSAnimator(canvas, fps);
SnakeGameScene scene = new SnakeGameScene(animator);
canvas.requestFocus();
canvas.addGLEventListener(scene);
canvas.addKeyListener(scene);
animator.start();
}
這裏,你有你的框架,帆布的WindowListener,動畫,事情OpenGL的動畫,在這種情況下,SnakeGameScene ......如果我們改變了主類,其中主要的方法是,使動畫FPS多變通過一些觸發器。我將顯示的代碼將通過按鍵進行更改。因此,它在SnakeGameScene的keyPressed @Overrides中。
@Override
public void keyPressed(KeyEvent k) {
int keyCode = k. getKeyCode();
try{
if(this.lockKeyAfterPressed){
switch(keyCode){
case KeyEvent.VK_UP:
this.snake.setDirection(Direction.UP);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_DOWN:
this.snake.setDirection(Direction.DOWN);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_LEFT:
this.snake.setDirection(Direction.LEFT);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_RIGHT:
this.snake.setDirection(Direction.RIGHT);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_Z: // n1
Application.increaseFPS();
break;
case KeyEvent.VK_X://n2
Application.decreaseFPS();
break;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
在這一部分中,有關案件是後兩種情況下,n1和n2。當按下相應的按鍵時,可以增加或減少。但正如我上面所說的,我們需要先停下動畫師。所以我們把主要的課改爲下面的課。
public class Application {
private static int fps = 1;
private static Animator animator;
private static GLCanvas canvas;
public static void setAnimator(Animator animator){Application.animator = animator;}
public static int getFps() {return fps;}
public static void setFps(int fps) {Application.fps = fps;}
public static void increaseFPS(){
animator.stop();
setFps((getFps()+1));
Application.updateAnimator();
}
public static void decreaseFPS(){
animator.stop();
setFps((getFps()-1));
if(getFps() <1){setFps(1);}
Application.updateAnimator();
}
private static void updateAnimator(){
Application.setAnimator(new FPSAnimator(canvas, fps));
animator.start();
}
public static void main(String[] args) {
canvas = new GLCanvas();
Frame frame = new Frame("Snake");
frame.setSize(500, 500);frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
animator = new FPSAnimator(canvas, fps);
SnakeGameScene scene = new SnakeGameScene(animator);
canvas.requestFocus();
canvas.addGLEventListener(scene);
canvas.addKeyListener(scene);
animator.start();
}
}
在這裏,您不要在主要方法中創建Canvas,animator和Fps,它們必須位於類中。當按下相應的按鍵時,系統將停止動畫製作者,然後用更新的fps創建一個新的動畫製作者並將其設置爲動畫製作者,然後再次啓動動畫製作者實例。
對不起,如果我矯枉過正,添加不相關的代碼,使描述和語法錯誤。 希望它可以幫助你。
相關問題
- 1. android apk:在20至60 FPS之間更改每秒幀數(FPS)
- 2. 限制幀每秒
- 3. 更改CSS顏色每秒
- 4. 每秒更改TextView值(Android)
- 5. 使用WPF的DrawingContext類每秒幀數
- 6. .setPreviewFpsRange():更新攝像頭時每秒更新幀數.setParameters()
- 7. 我該如何編程每秒幀數
- 8. 在遊戲中計算每秒幀數
- 9. 檢索每秒幀數 - Android/MediaMetadataRetriever
- 10. 如何阻止每秒幀數下降?
- 11. Twilio每秒可編程視頻幀數
- 12. MediaElement - 如何獲得FPS(每秒幀數)?
- 13. Android OpenGL ES:每秒限制幀數
- 14. 每秒更改燈光的顏色
- 15. 每秒倒數值更新
- 16. 如何增加每秒的cocos2d幀
- 17. C#TPL每秒更新Gridview每秒
- 18. 如何更改android背景每個???秒?
- 19. 如何每10秒更改iframe
- 20. Android每10秒更改一次圖片
- 21. 每秒動態更改背景圖像
- 22. 每30秒更改一次iframe源。
- 23. 每10秒更改一次變量值
- 24. 如何更改背景每5秒
- 25. 在數據框列表中更改數據幀中的每列
- 26. QT每幀更改像素圖
- 27. 如何獲取視頻捕獲對象的每秒幀數/幀數
- 28. 如何每15秒檢查並更改mysql中的數據?
- 29. 每30秒更改一個SQL表的數據
- 30. 每秒更新DataGridView
如果你會閱讀你的鏈接,你會發現它會在Animator已經啓動的情況下拋出異常。 「拋出: GLException - 如果動畫師已經啓動」 您需要停止動畫師更改FPS並再次開始 – Horonchik 2013-07-26 12:42:04
是的,對於錯過閱讀的道歉,我會編輯我的答案以獲得更好的解決方案。 – rebuked 2013-07-26 16:23:59
這個答案比它需要的更復雜。不要重新初始化動畫製作者,而應該停止設置fps並重新啓動它。 'animator.stop(); animator.setFPS(FPS); animator.start();' – Winder 2017-09-17 21:21:16