Iphone 使用cocos2d投球,但不使用任何物理引擎

Iphone 使用cocos2d投球,但不使用任何物理引擎,iphone,ios4,cocos2d-iphone,Iphone,Ios4,Cocos2d Iphone,我想以快速击球的速度投球,但不想使用任何物理引擎。因此,请任何人都能建议我如何做到这一点 谢谢我正在使用抛射运动公式以及cocos动作来实现这一点。这里有一个可能的方法: 首先 实现一个CCActionInterval子类,该子类接收射弹公式参数并更新射弹位置。在这种情况下,projectLeaction。以下是您需要克服的关键方法: -(void) startWithTarget:(id)target { self.initialPosition = [target positio

我想以快速击球的速度投球,但不想使用任何物理引擎。因此,请任何人都能建议我如何做到这一点


谢谢

我正在使用抛射运动公式以及cocos动作来实现这一点。这里有一个可能的方法:

  • 首先
实现一个
CCActionInterval
子类,该子类接收射弹公式参数并更新射弹位置。在这种情况下,
projectLeaction
。以下是您需要克服的关键方法:

-(void) startWithTarget:(id)target
{
    self.initialPosition = [target position];
    self.elapsedTime = 0;
    [super startWithTarget:target];
}


-(void) update: (ccTime) tt
{   
    self.elapsedTime += tt;
    float t = self.elapsedTime;
    float theta = CC_DEGREES_TO_RADIANS(self.angle);
    float v0 = self.velocity;
    float g = self.gravitationalAcceleration;
    double x = v0 * cos(theta) * t;
    double y = v0 * sin(theta) * t - 0.5 * g * t * t ;
    [self.target setPosition: ccp(self.initialPosition.x + (float)x, self.initialPosition.y + (float)y)];

}
  • 第二
使用滑动手势识别速度,该速度将转化为上面等式中的球的初始速度和下面的
theVelocity
参数。我把那部分留给你

  • 第三
运行操作。i、 e

    ProjectileLaunch* action = [ProjectileLaunch actionWithDuration:10 
                                                              angle:45
                                                    initialVelocity:theVelocity
                                                                  g:9.8];
    [sprite runAction:action];
我希望这对你有帮助


关于。

一种简单而有效的方法,无需明确使用任何物理引擎,就是在更新循环中手动步进球精灵的速度和位置,欧拉风格

在典型情况下(重力向下),y方向的速度为非恒定速度,x方向的速度为恒定速度,因此代码如下:

-(void) update: (ccTime) dt
{
    // Step only the y-velocity
    velocity_y += GRAVITY * dt; 
    // Step the position values and update the ball sprite position accordingly
    ball.position.x += velocity_x * dt;
    ball.position.y += velocity_y * dt;
}
然后,当检测到刷卡事件时

  • 捕捉滑动速度(您必须计算当前和最后一帧中手指触摸位置的变化)
  • 如有必要,将速度乘以比例因子
  • 将*velocity_x*和*velocity_y*设置为这些初始值