我正在Java Swing中製作一個簡單的平臺遊戲。當然,我希望某些平臺對於一個屏幕來說太大,我有以下問題:當玩家控制的角色接近屏幕邊緣時,背景移動的最佳方式是什麼?事實上,不僅僅是背景,還有整個遊戲內容(對手,磚塊等)?毫無疑問,只要上傳一張新圖像並在角色移動1個像素時重繪所有內容,肯定會有更好的方法。我希望我以一種可以理解的方式說明這一點,我試圖在本網站和其他網站上查找它,但目前爲止沒有運氣。 Thx提前。如何讓平臺遊戲中的背景移動?
回答
這種類型的平臺遊戲被稱爲side scroller。
基本上,您創建的圖像比您的JPanel更寬或更高。您可以使用Java圖像處理來剪切一張圖像並將其顯示在JPanel中。
經過一段時間後,您裁剪出不同的圖像片段並將其顯示在JPanel中。這發生得太快,看起來圖像滾動。
您必須在遊戲中爲您的遊戲玩家,磚塊和任何其他物體建模。繪製背景後,必須繪製這些對象。
查看Killer Game Programming in Java的第12章。你可能需要先閱讀前面的章節,所以第12章是有意義的。如果你想做很多Java遊戲開發,那就買這本書吧。
好吧,所以我在開始時上傳整個地圖,然後只畫出當前的片段?唯一的問題是,你的意思是「經過一段時間後,你裁剪出不同的圖像並將其顯示在JPanel中。」?具體來說,什麼時候,或者什麼時候你只是表示我在角色接近屏幕邊緣時這麼做? – MountainThatCodes
@MountainThatCodes:假設您希望您的遊戲以每秒20幀的速度運行。這意味着你有50毫秒來生成一個幀。時間單位是50毫秒。你必須確定你想要滾動多少背景,玩家可以在50毫秒內移動多遠。 –
@MountainThatCodes:這取決於你的地圖有多大。如果它是一個真正的側卷軸,每2,000個像素重複您的背景,您可以在開始時加載整個圖像。如果你的遊戲世界很大,你將不得不使用平鋪,並建立一個比你的JPanel稍大的圖像。 –
我認爲上面的答案是一種行之有效的方法,但如果你想另一個。你可以將你的Graphics對象轉換成一個Graphics2D對象,然後你可以從原點轉換一段距離。當你做這一切,你吸取將被翻譯
@Override
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.translate(character.x,character.y);
background.render(g);
character.render(g);
}
雖然這確實需要重新繪製可能沒有必要移動對象的Graphics對象。當處理大型地圖時,它可能會成爲一個問題。但是我總是試着渲染屏幕上的對象和一些可能部分顯示在屏幕上的對象。這顯示了一種方法來做到這一點的指南是在YouTube上
- 1. 在box2d遊戲中移動背景
- 2. 移動跨平臺遊戲引擎
- 3. 遊戲平臺
- 4. Android遊戲滾動背景
- 5. 側滾動遊戲背景
- 6. 如何修改我的遊戲以適合移動平臺?
- 7. 平臺遊戲中的啓動變量
- 8. XNA平臺遊戲背景不再改變
- 9. Android遊戲背景
- 10. 多平臺遊戲中心
- 11. 啓動的cocos2d遊戲最初的遊戲背景
- 12. 在libgdx遊戲中移動背景屏幕(android)
- 13. 如何在AS3平臺遊戲中創建平臺?
- 14. Java遊戲,背景的矩形正在移動
- 15. Android - 移動我的遊戲背景horizontaly(OpenGL)
- 16. 如何使蟒蛇平臺遊戲
- 17. 頸背移動平臺
- 18. 移動平臺上的遊戲消息傳遞?
- 19. 移動平臺對象 - 使用box2D的Android遊戲
- 20. 遊戲背景滾動/循環算法
- 21. 如何將遊戲引擎移植到另一個平臺?
- 22. 平臺,創建遊戲
- 23. 跨平臺遊戲開發
- 24. Java平臺遊戲衝突
- 25. 跨平臺手機遊戲?
- 26. ActionScript平臺遊戲hitTest
- 27. 2D平臺遊戲物理
- 28. iPhone平臺遊戲。控制?
- 29. Java平臺遊戲性能
- 30. Android 2D平臺遊戲
您使用的是圖像背景?您應該重寫'JPanel'中的'paintComponent'方法,並使用'Graphics'類直接繪製像素。一般的經驗法則是,除非需要,否則不會進行優化 - 所以請嘗試您認爲最好的方式,如果它不起作用,我們可以通過您嘗試過的一個小例子來幫助您。 – sdasdadas