【问题标题】:Cocos2d: Why double-speed on retina display?Cocos2d:为什么在 Retina 显示器上加倍速度?
【发布时间】:2011-09-05 16:19:54
【问题描述】:

在更新方法中:一个层,我是这样移动一个平面的:

-(void) update:(ccTime)delta
{
    ...

    pos.x += vVelocity.x;
    pos.y += vVelocity.y;
    plane.position = pos;
}

在 iPad 上作为通用应用程序进行测试时,它可以按预期工作,但是当我在 iPhone 4 上进行测试时,飞机的移动速度是原来的两倍!我正在为视网膜显示版本使用 -hd 图像。 使用 Retina 显示器时,我是否遗漏了什么或者必须将上述代码中的速度减半?

【问题讨论】:

  • Cocos2D v0.99.5 及更新版本支持视网膜显示。你用的是哪个版本?
  • @phix23 我正在使用 Cocos2D v1.0...

标签: iphone ipad cocos2d-iphone retina-display


【解决方案1】:

Cocos2d 使用点来测量,因此即使使用视网膜也将屏幕位置视为 480x320。听起来 vVelocity 是基于像素的,所以它应该是它的两倍。该错误是计算速度的地方。请参阅http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:how_to_develop_retinadisplay_games_in_cocos2d 了解更多信息。

【讨论】:

  • codeCGPoint pos = plane.position; codepos.x += 1; codeplane.position = pos;
  • 我已经像上面那样简化了动画代码,但它仍然在视网膜显示器上以双倍速度运行。
【解决方案2】:

我无法重现这种行为。您应该将速度(以每秒点数给出)乘以增量。这表现得应该(在有和没有视网膜显示的 iOS 模拟器中测试):

-(void) update:(ccTime)delta
{
    // ...
    CGPoint pos = plane.position;
    pos.x += vVelocity.x*delta;
    pos.y += vVelocity.y*delta;
    plane.position = pos;
}

【讨论】:

  • 即使我乘以 delta,问题仍然存在。我现在意识到,在视网膜显示版本上,平面对象由于某种原因正在缩小。这是发生了什么的线索,但我不知道是什么。我将通过重建项目来解决这个问题。谢谢。
  • if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {// If NOT on the iPad, scale down plane// In your games, use this to load art sized for the device[plane setScaleX:screenSize.width/1024.0f];[plane setScaleY:screenSize.height/768.0f];}
  • 上面的代码导致了我的问题。这是一本书的临时代码,应该被删除。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多