2010-02-25 72 views
2

在這裏,我更新了我的世界,包括畫布大小如何使用回調在我自己的代碼

world.getViewPort().updateViewPortSize(width,height); 

有沒有更好的方式來做到這一點?有沒有一種方法可以自動更新我的世界對象,而無需在setSurfaceSize方法中手動調用它,而是從My world類中調用它?

我的猜測是我可以使用某種回調,但我不明白它們!

/* Callback invoked when the surface dimensions change. */ 
public void setSurfaceSize(int width, int height) { 
    // synchronized to make sure these all change atomically 
    synchronized (mSurfaceHolder) { 
     mCanvasWidth = width; 
     mCanvasHeight = height; 
     world.getViewPort().updateViewPortSize(width,height); 
    } 
} 

回答

4

Java中的回調函數非常簡單。做到這一點的方法是簡單地定義一個具有單一方法m()的接口A,然後向你的World類添加一個類型A的集合。然後,在World對象中的某個點上,您想遍歷A集合並在每個元素上調用方法m()。爲了給你的世界添加「回調函數」,你只需定義一些實現你的接口A的類,並將它放入World類的A對象集合中。例如,

public interface CallbackFunction 
{ 
    public void execute(int a, int b); 
} 

public class World 
{ 
    List<CallbackFunction> callbackFunctions; 

    public void addCallback(CallbackFunction f) 
    { 
     callbackFunctions.add(f); 
    } 

    private void updateWorld() 
    { 
     // This loop could be anywhere in your World class 
     for(CallbackFunction f : callbackFunctions) 
     { 
      f.execute(<some int>, <some int>); 
     } 
    } 
} 

然後到功能添加到您的世界:

world.addCallback(new CallbackFunction() 
{ 
    public void execute(int a, int b) 
    { 
     // Do some stuff 
    } 
} 

我離開休息給你,但是這應該給你如何回調在Java中通常實施的好主意。

你不需要存儲一個通用的回調函數集合,你可以在你的World類中使用特定的回調函數加上特定的方法。例如,你的World類可能有一些通過比較集合中的兩個元素來排序的方法。爲了確定一個對象應該先前還是先後,可以定義一個CallbackFunction接口,該接口具有一個接受兩件事情的方法(如int),並返回一個指示哪個事件應該先行的值。例如,

public interface CallbackForSorting 
{ 
    public int compare(int a, int b); 
} 


public class World 
{ 
    List<Integer> thingsToSort; 

    public void sortThings(CallbackForSorter sorter) 
    { 
     int result = sorter.compare(thingsToSort.get(i), thingsToSort.get(i+1)); 

     if(result == 0) // elements are equal 
     if(result == -1) // thingsToSort.get(i) is "less than" thingsToSort.get(i+1) 
     if(result == 1) // thingsToSort.get(i) is "greater than" thingsToSort.get(i+1) 
    } 
} 
+0

很好的答案,thx – jax 2010-02-27 03:47:56

相關問題