一些背景:的Android - 帆布的onDraw與縮放卡馬拉以下人物動作
我創建一個Android遊戲繪製一個迷宮到對背景圖像的畫布,這裏採用方形塊,因此迷宮總是automtically放大到5 x 5平方米的迷宮,可能是20 x 20.通過簡單地運行一組for循環繪製迷宮,然後在相關位置繪製線條。這一切都工作完美,但我有一個問題,讓我的onDraw工作順利。這是因爲每當我無效時,我必須重新運行for外觀並運行各種if語句來檢查位置(不幸的是,這個過程無法改進)。
問題:
我期待重新寫我的迷宮繪製在畫布上的方式,下面是我需要實現3個主要特點:
1 - 畫整個迷宮到畫布(這很容易) 2 - 放大迷宮,僅顯示5 x 5 3 - 移動角色(始終居中在屏幕上)並繪製迷宮的下一個部分
現在如上所述繪製整個迷宮很容易,並會使onDraw顯着更快因爲它們不需要在invaldate上運行for循環,所以在第一次加載關卡時可以執行一次。
關於第2點& 3,我看到這個工作的方式是在畫布的中間畫一個角色,然後用一個2d birdseye視角攝像頭連接/連接角色動作。這臺相機還需要放大到只顯示整個迷宮網格的5 x 5的程度。然後當charcater移動時,相機隨着角色移動並顯示已經繪製的迷宮的下一部分。我已經嘗試了一些事情,並做了一些研究,但是我從來沒有使用過畫布,也不知道從哪裏開始,甚至有可能。
所以總結一下,問題的主要部分是他們是否將birdseye視角相機連接到放大並隨角色圖像移動的角色。
下面是目前如何繪製迷宮的代碼片段,它使用2組for循環檢查2組布爾數組[] [],它們只存儲要繪製的垂直線和horixaonl線。
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, 100, background);
RectBackground.set(0,0, FullScreenWidth, FullScreenWidth);
canvas.drawBitmap(gameBackground, null, RectBackground, null);
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
float x = j * totalCellWidth;
float y = i * totalCellHeight;
indexY = i + currentY;
indexX = j + currentX;
// Draw Verticle line (y axis)
if (indexY < vLength && indexX < vLines[indexY].length && vLines[indexY][indexX])
{
RectOuterBackground.set((int)x + (int)cellWidth, (int)y, (int)x + (int)cellWidth + 15, (int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
// Draws Horizontal lines (x axis)
if (indexY < hLength && indexX < hLines[indexY].length && hLines[indexY][indexX])
{
RectOuterBackground.set((int)x, (int)y + (int)cellHeight,(int)x + (int)cellWidth + 15,(int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
}
}
}
我還要補充一點,該方法的onDraw可悲的是不完整的。如果你需要看到整個事情的工作,我可以給你一些代碼。我寫了一個應用程序,它和你在迷宮中做的事情類似。它繪製筆記本線條並從手寫筆捕獲手寫。 – mttdbrd
明天我會看看這個,請給我發電子郵件給我你的完整代碼,這樣我就可以看到一個工作版本。謝謝。 –
我不知道如何通過SO發送電子郵件。如何做到這一點? – mttdbrd