我想在同一时间运行两个动作。我想同时以X方式和Y方式移动对象。我正在尝试这样的行动:
sprite.position = CGPointMake(300, 300);
SKAction *action3 = [SKAction moveTo:CGPointMake(sprite.position.x,100) duration:0.5];
SKAction *action2 = [SKAction moveTo:CGPointMake(50,300) duration:1];
SKAction *group = [SKAction group:@[action2,action3]];
[sprite runAction:group];
但这是第一个action3然后是action2。我想要做的是对象(节点)在Y坐标上上下移动,同时节点必须移动X坐标。
答案 0 :(得分:3)
如果我理解正确的话,听起来你似乎想要让它基本上垂直反弹并在X方向上移动。
如果是这样,这应该有效:
SKAction *up = [SKAction moveByX:0 y: 100 duration:1];
SKAction *down = [SKAction moveByX:0 y:-100 duration:1];
SKAction *action1 = [SKAction repeatActionForever:[SKAction sequence:@[up, down]]];
SKAction *action2 = [SKAction moveByX:200 y:0 duration:5];
SKAction *group = [SKAction group:@[action1, action2]];
答案 1 :(得分:1)
SKAction *action3 = [SKAction moveTo:CGPointMake(sprite.position.x,100) duration:1];
SKAction *action2 = [SKAction moveTo:CGPointMake(50, 300) duration:1];
问题是你不能同时运行两个移动动作。一个人会覆盖其他人的行为,因此实际上只有一个动作的结果会显示在屏幕上。
你必须问问自己这里的目标是什么,精灵应该如何移动?假设您想要将X轴上的精灵移动到50点(因为另一个动作保持X坐标不变)但是它应该在Y轴上,100还是300?精灵不能同时做两件事。
如果您想要更复杂的移动行为,例如在水平移动时连续向上/向下移动,您必须独立使用moveToX:和moveToY:并以不同方式计时。例如:
SKAction *moveLeft = [SKAction moveToX:50 duration:4];
SKAction *moveUp = [SKAction moveToY:300 duration:2];
SKAction *moveDown = [SKAction moveToY:100 duration:2];
[sprite runAction:moveLeft];
[sprite runAction:[SKAction sequence:@[moveUp, moveDown]]];
精灵需要4秒才能向左移动,同时需要2秒才能向上移动200秒,另外2秒需要向下移动到100.最后它将是50,100。
顺便说一下,使用组操作相当于只为组中的每个操作调用一次runAction:
答案 2 :(得分:0)