- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 cocos2d 制作基于图 block 的 2d RPG。我正在为我的 map 使用 CCTMXTileMaps。我的玩家以屏幕为中心, map 围绕它移动(除非玩家走向 map 边缘,他们离开中心并实际移动)。该系统在大 map 上运行良好。然而,在小 map 中, map 固定在屏幕的右上角。虽然该机制仍然有效,但让这些小 map 自动居中会很好。
如何使小于屏幕尺寸的 map 居中?我希望 map 在“红框”中居中。 (红框只是为了说明目的,它实际上并不存在于代码中。)
编辑:
所以我在理论上想出了如何做到这一点,但我在理解坐标系时遇到了麻烦。我正在使用以下代码使 map 居中,但它没有按预期运行。 map 从屏幕上加载。
if ((self.tileMap.contentSize.height < screenSize.height) && (self.tileMap.contentSize.width < screenSize.width)) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);
CGPoint centerOfMap = CGPointMake((self.tileMap.mapSize.width*self.tileMap.tileSize.width)/2, (self.tileMap.mapSize.height*self.tileMap.tileSize.height)/2);
self.tileMap.anchorPoint = centerOfMap;
self.tileMap.position = centerOfView;
}
我在这里做错了什么?
最佳答案
好的,解决方案非常简单,尽管我遗漏了一些东西。在父级中居中 map 的最基本代码是这样的:
//
// Get the center of the
// screen/map layer (which are the same)
//
CGPoint centerOfSelf = CGPointMake(self.contentSizeInPixels.width/2, self.contentSizeInPixels.height/2);
//
// Position the map in the center
//
tileMap.position = CGPointMake(centerOfSelf.x - (tileMap.contentSizeInPixels.width/2), centerOfSelf.y - (tileMap.contentSizeInPixels.height/2));
如果您为每个场景加载一张 map ,上述代码将起作用。但是,如果您(像我一样)有一个加载 map 和相关数据的“世界”场景,那么您需要做一些不同的事情。您会看到,加载比屏幕大的 map 会导致图层“拉伸(stretch)”并调整自身大小以适应更大的 map 。这样做时,上面的代码将在“拉伸(stretch)” map 场景中居中并随后加载 map 。所以,为了解决这个问题,我首先必须调整“世界场景”层的大小以匹配屏幕的大小。为此,我使用以下代码:
//
// Reset the size of the bounding
// area so that we can properly
// center maps that are smaller than
// the bounding area of the screen.
//
CGSize screenSize = [[CCDirector sharedDirector] winSize];
self.contentSizeInPixels = screenSize;
//move camera
self.position = CGPointZero;
请注意,我还将“相机”移回 0,0 位置,以防我们跟随主角离开。
关于ios - 如何在 cocos2d 中将一个小的 CCTMXTileMap 居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686020/
我正在使用 cocos2d 制作基于图 block 的 2d RPG。我正在为我的 map 使用 CCTMXTileMaps。我的玩家以屏幕为中心, map 围绕它移动(除非玩家走向 map 边缘,他
我是一名优秀的程序员,十分优秀!