1

这几天我一直在看一本关于 ios5 的 cocos2d 框架的书,并开发了一个小游戏,该书会引导您完成。要控制游戏中的精灵,您可以使用加速度计:

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

    float deceleration = 0.4f;
    float sensitivity = 6.0f;
    float maxVelocity = 100;

    // adjust velocity based on current accelerometer acceleration
    playerVelocity.x = playerVelocity.x * deceleration + acceleration.x * sensitivity;

    // we must limit the maximum velocity of the player sprite, in both directions (positive & negative values)
    if (playerVelocity.x > maxVelocity)
    {
        playerVelocity.x = maxVelocity;
    }
    else if (playerVelocity.x < -maxVelocity)
    {
        playerVelocity.x = -maxVelocity;
    }

    // Alternatively, the above if/else if block can be rewritten using fminf and fmaxf more neatly like so:
    // playerVelocity.x = fmaxf(fminf(playerVelocity.x, maxVelocity), -maxVelocity);
}

现在我想知道是否可以更改此代码以允许精灵仍沿 x 轴加速/减速,但使用触摸输入而不是加速度计,并且按住触摸的时间越长越快?因此,向右触摸会将精灵缓慢移动到该点,如果释放触摸,它将停止移动到该点。按住触摸的时间越长,精灵移动的越快。

框架中有什么东西可以让我实现一个旋转机制,让我的精灵旋转到触摸所在的位置,所以它看起来像是面向被触摸的点?

4

1 回答 1

1

好吧,afaik 没有方法可以确定触摸的角度,然后相应地旋转精灵,但是如果你有精灵的 x 和 y 坐标以及触摸,你可以很容易地自己计算它。

CGPoint spriteCenter; // this should represent the center position of the sprite
CGPoint touchPoint; //location of touch

float distanceX = touchPoint.x - spriteCenter.x;
float distanceY = touchPoint.y - spriteCenter.y;

float angle = atan2f(distanceY,distanceX); // returns angle in radians

// do whatever you need to with the angle

一旦你有了角度,你就可以设置精灵的旋转。

于 2012-06-18T03:09:49.483 回答