2017-10-15 150 views
1

我正在使用javafx進行遊戲。我以前在awt中編寫過一些遊戲,所以我對遊戲的工作原理有了基本的瞭解。 (我使用了bufferedimages)但是,在javafx api中的所有新東西中,我在質疑我的舊遊戲架構是否仍然適用於javafx。這是我遊戲的當前邏輯:javafx在遊戲中渲染實體的正確方法?

enter image description here

這是我的渲染是如何工作的:

List<Entity> entities= new ArrayList<Entity>; 
GraphicsContext gc; ///imagine that I created a new GraphicsContext object 

內渲染方法,它基本上是這樣的:

for(Entity e : entities) 
{ 
    gc.drawImage(e.getX(),e.getY(),e.getImage()); 
} 

然而,因爲javafx有這麼多的新功能,我想知道這種方法是過時的還是低效的。我應該移動這些實體還是應該自己移動圖像?我正在研究太空射擊遊戲,Interpolate()和Transition是否會改進我的遊戲?

有沒有很多具體的javafx遊戲教程可用,所以我必須在這裏尋求一些幫助... 謝謝!

+0

看看'Timeline',對於[示例](https://stackoverflow.com/q/39185306/230513)。 – trashgod

+0

@trashgod我目前正在爲我的循環使用AnimationTimer。你認爲如何讓我的Entity類成爲ImageView的一個子類? – Ptolemorphism

+0

這可能是一個糟糕的想法,因爲繪製圖像不需要像ImageView那樣多的內存。 ImageView爲您提供了更多不必要的選項,不應該用於遊戲開發! –

回答

2

你正在做的方式是在我看來,做到這一點的最好辦法,我已經做了類似的東西,並用這樣的實體: 包jumpNRun.gameObjects;

import java.util.List; 
import javafx.scene.image.Image; 
import javax.xml.bind.annotation.XmlRootElement; 
import jumpNRun.gameObjects.entitys.Solid; 


@XmlRootElement 
public class Entity { 

    protected Image entityImage; 

    protected double gravity = 0; 

    protected int height = 0, width = 0; 

    protected int x = 0, y = 0; 

    protected int id = 0; 
    /** 
    * Class speciefed informations 
    */ 
    protected String extraInfo; 
    protected boolean killed = false; 

    public String getExtraInfo() { 
     return extraInfo; 
    } 

    public void setExtraInfo(String extraInfo) { 
     this.extraInfo = extraInfo; 
    } 

...等 圖紙可以做到這樣的:

gc.drawImage(backround, 0, 0); 
    for (Entity e : entitys) { 
     gc.drawImage(e.getEntityImage(), e.getX(), e.getY()); 
    } 
+0

如果你想我可以給你一個我做的遊戲項目..這不是很好,但可能會有所幫助 –