机器人RPG游戏等距视图
问题描述:
表示通过由6
2D阵列表示8
表示7
表示的-1是空的区域,并0草满
这是代码我正在使用渲染视图
//map class
private int[][] terrain = new int[20][20];
}
//constructor
protected Drawable[] tiles = new Drawable[10];
tiles[GameMap.GRASS] = getResources().getDrawable(R.drawable.grass);
tiles[GameMap.GRASS_WU] = getResources().getDrawable(R.drawable.grass_wu);
tiles[GameMap.GRASS_WD] = getResources().getDrawable(R.drawable.grass_wd);
tiles[GameMap.GRASS_EU] = getResources().getDrawable(R.drawable.grass_eu);
tiles[GameMap.GRASS_ED] = getResources().getDrawable(R.drawable.grass_ed);
protected void onDraw(Canvas canvas) {
//move_Unit();
for (int x=0;x<map.getWidthInTiles();x++) {
for (int y=0;y<map.getHeightInTiles();y++) {
if(map.getTerrain(x,y) != -1){
tiles[map.getTerrain(x,y)].setBounds(x*16,y*16,(x*16) + 16,(y*16) + 16);
if (map.getUnit(x,y) != 0) {
tiles[map.getUnit(x,y)].setBounds(x*16,y*16,(x*16) + 16,(y*16) + 16);
}
tiles[map.getTerrain(x, y)].draw(canvas);
tiles[map.getUnit(x, y)].draw(canvas);
}
}
}
}
}
为什么我的视图显示为像这样以及如何修复它?
答
这非常容易。只是将它视为2D开销游戏,但屏幕底部的东西需要稍后绘制,以便它们出现在屏幕上更高的位置。因此,举例来说,如果在这个截图的顶部面包车是推动前进一点点,公交车就在它前面所需要的面包车后,可以得出:
这样的顶部公共汽车被拉过面包车的前方,看起来公交车更靠近摄像头,遮挡了后面的东西。当然,这些作品都必须进行匹配,但这并不需要任何编程工作。当上述游戏中的一辆汽车朝着不同的方向发展时,游戏只是为它绘制了一个不同的包装艺术品。
当然,有些游戏实际上使用3D模型和定位相机来实现此外观。
答
您是否考虑过x和y通常在计算机图形学中颠倒的事实。我记得当我用XNA框架制作了一个2d的tile引擎时,我做了一些工作。
基本上问题是,函数调用需要先x和y,因此它不匹配你正在执行的数组查找。
您的地图数组是正方形的,请尝试将其设置为奇数大小并翻转绘图函数参数以查看会发生什么。
是的,我做了简单的但我放弃它,因为它专注于iPhone,但你的链接似乎也涵盖了Android。让我仔细看看谢谢! – kimlexson 2011-03-13 23:17:57
'cocos2d-x'是'cocos2d-iphone'的一个C++端口:) – Macarse 2011-03-13 23:22:11
http://www.raywenderlich.com/1163/how-to-make-a-tile-based-game-with-cocos2d – kimlexson 2011-03-14 00:12:06