andengine的convertLocalCoordinatesToSceneCoordinates方法

使用Tile地圖,看過andengine中的例子,都會發現例子中有這麼一段話,以前版本的是convertLocalToSceneCoordinates方法。

 

 

scene.registerUpdateHandler(new IUpdateHandler() {  
            @Override  
            public void reset() { }  
  
            @Override  
            public void onUpdate(final float pSecondsElapsed) {  
                /* Get the scene-coordinates of the players feet. */  
                final float[] playerFootCordinates = player.convertLocalCoordinatesToSceneCoordinates(16, 1);//danielinbiti註1  
                /* Get the tile the feet of the player are currently waking on. */  
                final TMXTile tmxTile = tmxLayer.getTMXTileAt(playerFootCordinates[Constants.VERTEX_INDEX_X], playerFootCordinates[Constants.VERTEX_INDEX_Y]);  
                if(tmxTile != null) {  
                    // tmxTile.setTextureRegion(null); <-- Eraser-style removing of tiles =D  
                    currentTileRectangle.setPosition(tmxLayer.getTileX(tmxTile.getTileColumn()), tmxLayer.getTileY(tmxTile.getTileRow()));  
                }  
            }  
        });  

 

 

對於“註1”中的話,始終沒有理解這裡為什麼寫16,1,看上面的英文註釋,表達很清楚,就是轉換成屏幕坐標。

可能是原來沒有用過引擎,理解能力偏低。始終沒有理解這裡填寫16,1是怎麼來的,這兩個數字是隨便寫的還是怎麼計算出來的。看裡面的算法,也沒什麼疑問。

 

於是網上找資料,上andengine論壇,看著一篇篇的英文帖子,越看越模糊,數字五花八門,沒有任何規律。

 

 

哎,沒有規律就對瞭,一開始就糾結到瞭傳參上,這已經落入瞭陷阱,范瞭錯誤。實際這個函數的意思很好理解,就是把local坐標轉換成scene坐標。這個local相對與誰呢,實際上就是

 

 

player.convertLocalCoordinatesToSceneCoordinates  

 

 

這句話的前半部分,player,也就是括號中填寫的坐標是相對於player來說的,坐標系在屏幕的左下角,往後是X軸,往上是Y軸。括號中的參數就是相對於player的偏移量。

 

經過驗證後,就是這麼一回事。

 

一開始沒有發現,也是因為這是tilemap,根據格子畫的矩形,因此,如果這個數字的偏移量不大於一個格子的像素的花,矩形一直都在原地,看不出任何變化。也就導致小范圍改動數字都看不出效果來,改動太大瞭一下子又跑沒瞭。

 

特此記錄,以便於自己漲記性,對於一樣的後來者能夠立刻醒悟過來。

 

總算可以踏實的進行下一步瞭。

 

發佈留言