2013-08-01 69 views
0

我正在Java Swing中製作一個簡單的平臺遊戲。當然,我希望某些平臺對於一個屏幕來說太大,我有以下問題:當玩家控制的角色接近屏幕邊緣時,背景移動的最佳方式是什麼?事實上,不僅僅是背景,還有整個遊戲內容(對手,磚塊等)?毫無疑問,只要上傳一張新圖像並在角色移動1個像素時重繪所有內容,肯定會有更好的方法。我希望我以一種可以理解的方式說明這一點,我試圖在本網站和其他網站上查找它,但目前爲止沒有運氣。 Thx提前。如何讓平臺遊戲中的背景移動?

+0

您使用的是圖像背景?您應該重寫'JPanel'中的'paintComponent'方法,並使用'Graphics'類直接繪製像素。一般的經驗法則是,除非需要,否則不會進行優化 - 所以請嘗試您認爲最好的方式,如果它不起作用,我們可以通過您嘗試過的一個小例子來幫助您。 – sdasdadas

回答

1

這種類型的平臺遊戲被稱爲side scroller

基本上,您創建的圖像比您的JPanel更寬或更高。您可以使用Java圖像處理來剪切一張圖像並將其顯示在JPanel中。

經過一段時間後,您裁剪出不同的圖像片段並將其顯示在JPanel中。這發生得太快,看起來圖像滾動。

您必須在遊戲中爲您的遊戲玩家,磚塊和任何其他物體建模。繪製背景後,必須繪製這些對象。

查看Killer Game Programming in Java的第12章。你可能需要先閱讀前面的章節,所以第12章是有意義的。如果你想做很多Java遊戲開發,那就買這本書吧。

+0

好吧,所以我在開始時上傳整個地圖,然後只畫出當前的片段?唯一的問題是,你的意思是「經過一段時間後,你裁剪出不同的圖像並將其顯示在JPanel中。」?具體來說,什麼時候,或者什麼時候你只是表示我在角色接近屏幕邊緣時這麼做? – MountainThatCodes

+0

@MountainThatCodes:假設您希望您的遊戲以每秒20幀的速度運行。這意味着你有50毫秒來生成一個幀。時間單位是50毫秒。你必須確定你想要滾動多少背景,玩家可以在50毫秒內移動多遠。 –

+0

@MountainThatCodes:這取決於你的地圖有多大。如果它是一個真正的側卷軸,每2,000個像素重複您的背景,您可以在開始時加載整個圖像。如果你的遊戲世界很大,你將不得不使用平鋪,並建立一個比你的JPanel稍大的圖像。 –

1

我認爲上面的答案是一種行之有效的方法,但如果你想另一個。你可以將你的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上

Tutorial