2013-03-11 38 views
0

我打算將我的2D角色編排遊戲的原型重新設計爲「真實產品」。在那種情況下,我想用openGl代替Android Canvas。藉助openGl和一些常規問題,2D遊戲的可擴展性

我之所以想這是因爲我想讓遊戲在不同屏幕分辨率的設備上工作。爲此,我考慮使用openGL中的Cameraview面臨2D 2D遊戲紋理移動的牆上。如果當前設備的分辨率對於整個遊戲內容來說很小 - 我想移動攝像頭視角,以便角色始終處於中間位置,直到相機框到達「牆壁」的邊緣。 這是一個可能的解決方案,或者你寧願選擇一種不同的方式?

是否可以在openGl中繪製精靈,就像我可以使用canvas一樣?就像幾個層疊在一起。起初,瓷磚比數字與例如簡單的方塊作爲救生圈(第一背景比它上面的紅色生命)等等。

positionRect = new Rect(this.getPositionX(), this.getPositionY() 
      - (this.spriteHeight - Config.BLOCKSIZE), this.getPositionX() 
      + Config.BLOCKSIZE, this.getPositionY() + Config.BLOCKSIZE); 
spritRect = new Rect(0, 0, Config.BLOCKSIZE, spriteHeight); 
canvas.drawBitmap(this.picture, spritRect, positionRect, null); 

如果是這樣,我如何開始獲取第一個背景,也許第一個點(一個.png圖片)?我沒有找到任何教程什麼讓我開球。我知道如何設置GLSurfaceView的項目等等。

+0

對不起,如果這聽起來很愚蠢,但你有沒有嘗試過SurfaceView?爲什麼你需要一個攝像頭視圖? – 2013-03-11 11:59:07

+0

感謝您的提問。我確實解釋了它。如果設備的分辨率低於整個區域,我希望有一個與角色一起走動的視圖。我相信它可以用普通的Canvas來實現,但我不確定openGL是不是更好和更乾淨的解決方案。 Aspecialy如果我想進一步改進它。 – BennX 2013-03-11 13:22:27

回答

2

您將需要一些調整,但它可能很容易。既然你可以得到一個教程,並開始一些簡單的程序,我會給你一些指針:

首先,你應該看看預測。您可以在投影矩陣上使用「glFrustumf」或「glOrthof」。第一個用於3D更多,所以使用Ortho。此方法中的參數將表示屏幕的座標系邊界。如果您希望它們與大多數「查看」系統相同,請插入值:top=0, left=0, right=view.width, right=view.height

現在你可以創建一個正方形緩衝區,而不是矩形作爲

float[] buffer = 
{origin.x, origin.y, 
origin.x, origin.y+size.height, 
origin.x+size.width, origin.y+size.height, 
origin.x+size.width, origin.y, 
}; 

和紋理座標作爲

float[] textureCoordinates = 
    {.0, .0, 
    .0, 1, 
    1, 1, 
    1, .0, 
    }; 

您還需要加載紋理(S)(在一些初始化和只有一次,如果可能的話)女巫使用谷歌或堆棧溢出,因爲它取決於平臺...

這幾乎是所有你需要加入你的繪製方法:

enableClientState(vertexArray) 
enableClientState(texCoordArray) 
enable(texture2d) 

//for each object: 
vertexPointer(buffer) 
texCoordPointer(textureCoordinates) //unless all are same 
bindTexture(theTextureRepresentingTheSpriteYouWant) 
draw(triangleStrip, 4) 

至於移動使用的模型矩陣翻譯:

pushMatrix() 
translatef(x, y, .0) 
drawScene() 
popMatrix() 
+0

這看起來或多或少像我可以改變渲染和Surfaceview到GLSurfaceview,我完成了。感謝您的簡短介紹。 – BennX 2013-03-11 16:47:29

1

當使用OpenGL的工作,你是不是限制在「窗口」的尺寸。您將爲您的世界定義一個投影矩陣和視口,然後更改「相機」,您只需使用投影矩陣和視口。如果我是你,我會在開始這個項目之前拿起一本關於opengl的書,以便你知道opengl是如何工作的。

此外,如果你正在使用java,那麼你會想使用GLSurfaceView類。這可以處理所有的線程和所有的事情,所以你不必擔心它。