19

ユーザーが画面の左側または右側に触れたかどうかに応じて、SKNode を左右に移動したいゲームがあります。ユーザーが画面に触れている間、一定の動きをノードに適用するにはどうすればよいですか?

4

10 に答える 10

5

ivar を追加します。

CGPoint velocity;

モーションを設定します。たとえば、右に移動します。

velocity.x = 5;

ステップごとに速度を積分する:

-(void) update:(NSTimeInterval)currentTime
{
    CGPoint pos = self.position;
    pos.x += velocity.x;
    pos.y += velocity.y;
    self.position = pos;
}

追伸: アクションは時間ベース、つまり特定の期間後に終了することになっているため、連続操作、特に移動には悪いことで有名です。しかし、目的地に到着する前にアクションの時間がなくなったらどうなるでしょうか?

于 2013-10-10T05:18:11.097 に答える
0

物理的な力またはアクションを使用するかどうかによって異なります。

このようなもの

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

for (UITouch *touch in touches) {

    UITouch* touch = [touches anyObject];
    CGPoint loc = [touch locationInNode:self];

    if (loc.x > self.frame.size.width * 0.5) {
        NSLog(@"move right");
        // move the sprite using an action
        // or set physics body and apply a force
    }
    else {
        NSLog(@"move left");

    }
}
}

アクションを使用する場合は、touchesEndedで、移動中のスプライトからすべてのアクションを削除します。

touchesBeganで小さな力を適用している場合、スプライトは停止するはずです。

于 2013-10-10T04:44:27.290 に答える
0

がある場合SKNodephysicsBody、それに力を加えます。

@interface GameScene()

@property (nonatomic) CGVector force;

@end

@implementation GameScene

- (void)update:(CFTimeInterval)currentTime {
    [self.player.physicsBody applyForce:self.force];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    self.sideForce = CGVectorMake(3000, 0);
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    self.sideForce = CGVectorMake(0, 0);
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    self.sideForce = CGVectorMake(0, 0);
}

@end

そうでない場合は、LearnCocos2D の回答を使用してください。

于 2014-08-02T12:02:16.273 に答える
0

物理ボディの速度プロパティを使用します。変数 right は、タッチのポイントからオブジェクト (この場合は自分自身) を差し引いたもので、関連する速度を提供します。

-(void)segmentedTouchBegan:(NSValue *)p{
    CGPoint point = [p CGPointValue];
    int right = (point.x - self.screenWidth/2.0f)/ABS((point.x - self.screenWidth/2.0f)); //1 if right -1 if left
    self.physicsBody.velocity = CGVectorMake(SHIFT*right, 0);
}
-(void)segmentedTouchMoved:(NSValue *)p{
    CGPoint point = [p CGPointValue];
    int right = (point.x - self.screenWidth/2.0f)/ABS((point.x - self.screenWidth/2.0f)); //1 if right -1 if left
    self.physicsBody.velocity = CGVectorMake(SHIFT*right, 0);
}
-(void)segmentedTouchEnded:(NSValue *)p{
    self.physicsBody.velocity = CGVectorMake(0, 0);
}
于 2013-11-06T07:52:50.020 に答える
-1

左から右への固定位置でモーションを停止する必要がある場合。

これはSwiftとobjective-cの場合です。

あなたはphysicsBodyで使用する必要があります:

node.position = CGPoint(X: ..... , Y: .....) node.physicsBody = nil

于 2014-07-02T07:32:22.970 に答える