2011-06-03 49 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