首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cocos2d,box2d和视网膜模式:放弃,还是试着让它发挥作用?

cocos2d,box2d和视网膜模式:放弃,还是试着让它发挥作用?
EN

Stack Overflow用户
提问于 2011-05-01 17:27:04
回答 1查看 2.1K关注 0票数 6

我一直试图让我的box2d游戏在视网膜模式下工作,当我在高分辨率模式下运行时,我遇到了很多恼人的问题。

cocos2d在视网膜模式下正确地呈现图形,但我发现需要一次又一次的黑客攻击才能使box2d像在低分辨率模式下一样工作。例如,我发现我需要这样做才能使调试绘制的形状大小在视网膜模式下正确:

代码语言:javascript
运行
复制
b2Vec2 vertices[4];
vertices[0].Set(-0.5f / CC_CONTENT_SCALE_FACTOR(), 1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[1].Set(-0.5f / CC_CONTENT_SCALE_FACTOR(), -1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[2].Set(0.5f / CC_CONTENT_SCALE_FACTOR(), -1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[3].Set(0.5f / CC_CONTENT_SCALE_FACTOR(), 1.0f / CC_CONTENT_SCALE_FACTOR());  
int32 count = 4;    
b2PolygonShape polygon;    
polygon.Set(vertices, count);

当然,这一攻击(通过CC_CONTENT_SCALE_FACTOR()调整所有顶点点)不可避免地导致密度攻击,以保持类似于低分辨率模式的运动:

代码语言:javascript
运行
复制
b2FixtureDef fixtureDef;
fixtureDef.shape = &polygon;
fixtureDef.density = 1.0f * CC_CONTENT_SCALE_FACTOR();
fixtureDef.friction = 0.9f;
playerBody->CreateFixture(&fixtureDef);

当施加力量时,这将导致另一次调整攻击:

代码语言:javascript
运行
复制
b2Vec2 force = b2Vec2(10.0f / CC_CONTENT_SCALE_FACTOR(), 15.0f / CC_CONTENT_SCALE_FACTOR());
playerBody->ApplyLinearImpulse(force, playerBody->GetPosition());

请记住,我是通过缩放调试绘图调用来绘制调试模式的,如下所示:

代码语言:javascript
运行
复制
glPushMatrix();  
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1.0f);
world->DrawDebugData();
glPopMatrix();

什么是我从根本上误解了让box2d与视网膜模式一起工作?我正在使用Steffen的建议 class来代替PTM_RATIO,但这似乎还不够。有什么想法吗?我即将完全放弃视网膜模式,在这一点上我的游戏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-03 15:21:37

我使用的是带有GLESDebugDraw Xcode模板的Cocos2D+Box2D类,以及在视网膜模式下进行调试绘图的方式,它非常简单:

代码语言:javascript
运行
复制
m_debugDraw = new GLESDebugDraw( PTM_RATIO * CC_CONTENT_SCALE_FACTOR() );
world->SetDebugDraw(m_debugDraw);

我不需要在其他地方使用CC_CONTENT_SCALE_FACTOR(),因为除了在某些显式命名的类方法/属性(如contentSizeInPixels等)中,Cocos2D使用基于点的坐标空间,其中无论在视网膜模式还是在低res模式下,坐标值都是相同的,这意味着相同的PTM_RATIO可以用于在这两种模式中创建Box2D固定装置或形状。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5850066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档