cocos2dx学习小结

1. tiledmap

TMX: Only 1 tileset per layer is supported

多个图层可以来自于一个图块,一个图层只能来自于一个图块。

Tiled软件没有这个限制,如果需要让cocos2dx能够支持一个图层有多个图块,需要自己修改。

我的方案是不修改cocos2dx的这个限制,而是同一图层的不同图块根据图块名字自动新建图层,把不属于该层的瓦片删掉,并放在其对应新图层上。

加载完毕之后再自行调整zorder。

有时间再研究让它支持一个图层支持多个图块

position convert to tile index

Isometric(等距地图)

可以从CCPoint CCTMXLayer::positionForIsoAt(const CCPoint& pos)函数中看到从瓦片坐标到实际坐标的转换
容易发现瓦片的坐标点是菱形瓦片左边的顶点
解这个xy的方程可以得到一个大概的从实际坐标转换到瓦片坐标的公式
这个反向转换不够精确
int h = (_tileMap->getMapSize().height * 2 + _tileMap->getMapSize().width -3)/2.0 - position.x/_tileMap->getTileSize().width - position.y/_tileMap->getTileSize().height;
int w = (_tileMap->getMapSize().height * 2 - _tileMap->getMapSize().width - 1)/2.0 + position.x/_tileMap->getTileSize().width - position.y/_tileMap->getTileSize().height;
return CCPoint(w, h); 


support tile offset

cocos2dx 2.1.5不支持瓦片地图图块的偏移,可以稍作修改来支持他

class CC_DLL CCTMXTilesetInfo : public CCObject
{
public:
    std::string     m_sName;
    unsigned int    m_uFirstGid;
    CCSize          m_tTileSize;
	CCSize          m_tTileOffset;
    ...
};

CCTMXTilesetInfo::CCTMXTilesetInfo()
    :m_uFirstGid(0)
    ,m_tTileSize(CCSizeZero)
	, m_tTileOffset(CCSizeZero)
...
{
}


void CCTMXMapInfo::startElement(void *ctx, const char *name, const char **atts)
{
     ...
     	else if (elementName == "tileoffset")
	{
		CCTMXTilesetInfo* tileset = (CCTMXTilesetInfo*)pTMXMapInfo->getTilesets()->lastObject();

		CCSize s;
		s.width = (float)atof(valueForKey("x", attributeDict));
		s.height = (float)atof(valueForKey("y", attributeDict));
		tileset->m_tTileOffset = s;
	}
        ...
}

void CCTMXLayer::setupTileSprite(CCSprite* sprite, CCPoint pos, unsigned int gid)
{

	CCPoint np = positionAt(pos);
	np.x += m_pTileSet->m_tTileOffset.width;
	np.y -= m_pTileSet->m_tTileOffset.height;
        sprite->setPosition(np);
    ...
}


2.PVR support

cocos2d: WARNING: unsupported pvr pixelformat

cocos2dx据说默认支持mac下texturetool生成的pvr图片,但鄙人没有苹果电脑,故使用PVRTexTool来生成pvr图片
在windows测试时,发现cocos2dx并不支持pvrtc格式,仅支持九种,android和ios没有测试
/* supported channel type formats */
#define kPVR3TexturePixelFormat_BGRA_8888  0x0808080861726762ULL
#define kPVR3TexturePixelFormat_RGBA_8888  0x0808080861626772ULL
#define kPVR3TexturePixelFormat_RGBA_4444  0x0404040461626772ULL
#define kPVR3TexturePixelFormat_RGBA_5551  0x0105050561626772ULL
#define kPVR3TexturePixelFormat_RGB_565    0x0005060500626772ULL
#define kPVR3TexturePixelFormat_RGB_888    0x0008080800626772ULL
#define kPVR3TexturePixelFormat_A_8        0x0000000800000061ULL
#define kPVR3TexturePixelFormat_L_8        0x000000080000006cULL
#define kPVR3TexturePixelFormat_LA_88      0x000008080000616cULL


所以使用PVRTexTool转换图片时制定它支持的格式比如RGBA8888,如下
PVRTexToolCL -i grassland.png -f r8g8b8a8
想要变成pvr.ccz,只要用winRar用zlib压缩,后缀名改成pvr.ccz。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cocos2d-x js是一个开源的游戏开发引擎,用于开发跨平台的2D游戏,它使用JavaScript作为脚本语言。以下是对cocos2d-x js的回答。 cocos2d-x js是cocos2d-x引擎的JavaScript版本,它继承了cocos2d-x引擎强大的功能和性能,同时提供了使用JavaScript编写游戏的便利性。 cocos2d-x js通过使用JavaScript脚本语言进行游戏开发,使得开发者可以更加方便地编写游戏逻辑和动作表现。JavaScript是一种简单易用的脚本语言,对于不熟悉复杂编程语言的开发者来说,使用JavaScript进行游戏开发会更加容易上手。 cocos2d-x js提供了丰富的游戏功能和API,包括精灵动画、物理引擎、碰撞检测、场景管理等,这些功能可以帮助开发者快速构建2D游戏。同时,cocos2d-x js还提供了跨平台的支持,可以将游戏轻松移植到不同的平台上,如iOS、Android、Windows等。 除了基本的功能和API,cocos2d-x js还支持插件和扩展,开发者可以根据自己的需求进行扩展和定制,以满足游戏的特殊需求。 总结来说,cocos2d-x js是一个强大而灵活的游戏开发引擎,它提供了使用JavaScript进行游戏开发的便利性,同时具备跨平台的支持和丰富的功能和API。无论是初学者还是有经验的开发者,都可以通过cocos2d-x js来快速构建出高质量的2D游戏。 ### 回答2: Cocos2d-x是一款强大的跨平台游戏开发引擎,具有许多独特而且强大的功能。cocos2d-x js篇是Cocos2d-x引擎的JavaScript版本,它可以让开发者使用JavaScript编写游戏逻辑和界面。 使用Cocos2d-x js篇,开发者可以轻松地创建2D游戏,并在多个平台上运行,如iOS、Android、Windows和Web。这意味着开发者只需编写一次代码,就可以发布到多个平台,大大提高了开发效率。 cocos2d-x js篇提供了丰富的API和功能,使得开发复杂的游戏变得轻松。它包括图形渲染、动画系统、物理引擎、碰撞检测、音频管理等功能,开发者可以利用这些功能创建出丰富多样的游戏体验。 此外,cocos2d-x js篇还支持现代开发工具和技术,如可视化编辑器Cocos Creator,可实时调试和热更新等。开发者可以使用Cocos Creator创建游戏场景、编辑动画、创建粒子效果等。同时,Cocos2d-x js篇还集成了调试工具,方便开发者进行错误排查和优化。 总之,Cocos2d-x js篇是一个非常强大且灵活的游戏开发引擎。它提供了广泛的功能和工具,使得开发者能够快速创建高质量的2D游戏,并在多个平台上发布。无论是初学者还是有经验的开发者,都可以通过Cocos2d-x js篇轻松实现独特而丰富的游戏体验。 ### 回答3: Cocos2d-x js是一种使用Javascript编写的跨平台游戏开发框架。它是基于Cocos2d-x引擎的扩展,可以在多个平台上运行,包括iOS、Android、Windows和Mac等。 Cocos2d-x js提供了丰富的游戏开发工具和功能,可以帮助开发人员轻松创建高质量的游戏应用。它具有优秀的性能和灵活性,并且能够快速部署到各种平台上。 使用Cocos2d-x js,开发人员可以使用熟悉的Javascript语言进行游戏开发,而无需学习其他编程语言。它提供了一系列API和组件,例如精灵、动作、节点和场景等,以简化游戏的创建和管理过程。 此外,Cocos2d-x js还提供了多种功能,如物理引擎、碰撞检测、音效播放和动画效果等,可以帮助开发人员实现各种游戏特效和交互效果。 Cocos2d-x js还支持一些常用的开发模式和工具,如游戏UI编辑器、游戏调试器和性能分析器等,方便开发人员进行游戏开发和调试。 总之,Cocos2d-x js是一款功能强大、易于使用并且跨平台的游戏开发框架。无论是新手还是经验丰富的开发人员,都可以借助它来创建出令人印象深刻的游戏应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值