gpt4 book ai didi

ios - cocos2d中x和y速度(加速度)不同?

转载 作者:行者123 更新时间:2023-11-29 04:41:05 26 4
gpt4 key购买 nike

我想使用标准操作(CCMoveBy 和 e.t.c)创建一个具有轨迹的可见对象,类似于:

x = sin(y)

我的代码:

CCMoveBy *moveAction1 = [CCMoveBy actionWithDuration:1.5 position:ccp(300, 0)];
CCEaseInOut *easeInOutAction1 = [CCEaseInOut actionWithAction:moveAction1 rate:2];
CCMoveBy *moveAction2 = [CCMoveBy actionWithDuration:1.5 position:ccp(-300, 0)];
CCEaseInOut *easeInOutAction2 = [CCEaseInOut actionWithAction:moveAction2 rate:2];
CCMoveBy *moveAction3 = [CCMoveBy actionWithDuration:1.5 position:ccp(0, -32)];
CCSpawn *moveActionRight = [CCSpawn actionOne:easeInOutAction1 two:moveAction3];
CCSpawn *moveActionLeft = [CCSpawn actionOne:easeInOutAction2 two:moveAction3];
CCSequence *sequenceOfActions = [CCSequence actionOne:moveActionRight two:moveActionLeft];
CCRepeatForever *finalMoveAction = [CCRepeatForever actionWithAction:sequenceOfActions];
[enemy runAction:finalMoveAction];

此代码仅显示向下移动。问题是对象具有不同的 x 和 y 加速度,我不知道如何将它们组合起来

已更新

- (void)tick:(ccTime)dt
{
CGPoint pos = self.position;
pos.y -= 50 * dt;
if (pos.y < activationDistance) {
pos.x = 240 + sin(angle) * 140;
angle += dt * 360 * 0.007;
if (angle >= 360) {
angle = ((int)angle) % 360;
}
}
self.position = pos;
}

这是我当前的解决方案。我可以增加activationDistance来调整物体轨迹。但我想设置角度变量的初始值。

我使用数字而不是变量,因为它们仅在该函数内使用。

已解决

要更改初始角度:

角度 = 点.x < 240 ? -asin((240 - point.x)/140) : asin((point.x - 240)/140);

主要问题是我的平铺 map 有自己的坐标并且仅覆盖屏幕的 320x320 部分

最佳答案

我认为您在帧更新方法中执行此操作会更容易(我假设您安排更新对象的方法。所以为什么不这样做:

- (void)tick:(ccTime)dt {
CGPoint pos = myObject.position;
pos.x = <desired x> + sin(angle);
pos.y = pos.y - y_acceleration * dt;
angle += dt * 360 * x_acceleration;
if (angle >= 360)
angle = ((int)angle) % 360;

myObject.position = pos;
}

您可以对对象的 y 轴应用相同的方法

关于ios - cocos2d中x和y速度(加速度)不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com