2011-06-03 46 views
1

我正在開發一款Android棋盤遊戲,並且有關於創建可縮放和滾動棋盤的問題。該板包含一個靜態背景,角色(玩家)和用瓦片繪製的實際「水平」。android可縮放和滾動棋盤遊戲

我的解決方案是擁有一組元素(瓷磚,人物,所有遊戲元素 - 全部具有x,y座標和寬度+高度),相機和渲染器,根據cameraX,cameraY,cameraWidth和cameraHeight。因此,如果用戶滾動到右側,攝像頭就會恰當地設置攝像頭X,並且表面可以滾動。如果用戶放大/縮小渲染器,則會適當縮放每個元素圖像。與輸入/輸出

protected function draw(Canvas c){ 
     Collection elements = collection.getElements(cameraX,cameraY,cameraWidth,cameraHeight); 
     if(elements.size() > 0) { 
     for(int i = 0; i < elements.size(); i++) { 
       elements.get(i).drawElement(c); 
     } 
     } 
    } 
    . 
    . 
    . 
    // element class drawElement function 
    protected drawElement function(Canvas c) { 
     if(this.image != null) {    
      int w = this.width; 
      int h = this.height; 
      if(this.zoomFactor < 1) { 
      w*=this.zoomFactor; 
      h*=this.zoomFactor; 
      } 
      c.drawBitmap(this.image,this.x,this.y,w,h); 
     } 
    } 
  • 滾動面和縮放渲染

    示例代碼,這是最好的解決方案?

  • 難道它會以某種方式實現嗎?
  • 使用ScrollView可以滾動滾動嗎?

我不想使用任何引擎,因爲這是一個學校項目。

回答

5

其實你可以稍微簡化這種情況。如果您確實在尋找一種平坦的紋理平面,那麼該平面會被視角扭曲,Android Camera課程可以爲您提供幫助。不要將此與硬件相機混淆拍照。此相機是一個輔助類,它圍繞矩陣執行2D對象轉換。您可以通過搜索「快速傅里葉變換」來了解更多關於這個非常複雜的渲染主題的信息。基本上你會想創建一個畫布,並以完全2D方式進行繪製。然後,在繪製到屏幕之前,您應該使用Camera類來轉換此畫布。如果您需要澄清,請告訴我。幕後有很多很酷的數學!

看看這個樣本從Android API演示

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html

的Android graphics.Camera文檔

http://developer.android.com/reference/android/graphics/Camera.html

+0

所以,如果我理解正確,U建議我畫在畫布上,然後使用Canvas.scale()和Canvas.save()實現縮放功能?如何滾動(我應該這樣做,如上所述)?你可以發佈一個關於這個類的鏈接(我得到的是硬件相機)。謝謝 – Jernej 2011-06-03 16:53:40

+0

正確!看起來像你得到它。如上所述,使用'Camera.translate(x,y,z)'方法代替滾動。您需要翻譯X軸和Y軸以進行滾動,然後上下翻轉Z軸進行縮放。對於缺失的鏈接抱歉,很難找到!該文檔是http://developer.android.com/reference/android/graphics/Camera.html – Sam 2011-06-03 17:09:07

+0

謝謝你,你一直很有幫助..如果我明白correclty你的方法繪製整個級別(這大約是2000x480像素)到畫布(480x800像素),並使用相機類來實現滾動和縮放。但不是畫出整個級別(2000x500)的每一幀高頻? – Jernej 2011-06-03 18:25:20