Jordan
Jordan

Reputation: 1614

SpriteKit 1 Dimensional Movement

I'm using apple's Sprite Kit and I need to move a SKSprite Node in horizontal movement only. I want the rest of the physics to apply but only in the horizontal component.

Context: This is for an object supposedly on a slider that can bounce back and forth. I have everything done but if it is hit the end the wrong way it simply floats off vertically, how can I simply make it ignore all forces in the vertical direction.

Upvotes: 3

Views: 681

Answers (3)

NieLernend
NieLernend

Reputation: 300

You could use constraints for this purpose. I made a short sample with a node that only moves in a fixed X range and never leaves a specified Y position:

SKSpriteNode* node = [SKSpriteNode node];
node.color = [SKColor greenColor];
node.size = CGSizeMake(20, 20);

SKRange* rangeX = [[SKRange alloc] initWithLowerLimit: 100 upperLimit: 400];
SKRange* rangeY = [SKRange rangeWithConstantValue: 100];
SKConstraint* positionConstraint = [SKConstraint positionX: rangeX Y: rangeY];

NSArray* constraintArray = [NSArray arrayWithObject: positionConstraint];
node.constraints = constraintArray;

[self addChild: node];

Upvotes: 1

Deepak
Deepak

Reputation: 427

This method is from SKAction class to move objects only on Horizontal or X-axis:-

[mySpriteNode runAction:[SKAction moveToX:260 duration:0.5]];

I hope this work's for you.

Upvotes: 0

CodeSmile
CodeSmile

Reputation: 64477

By putting the node's position back at the desired Y coordinate every frame after physics has been simulated:

-(void) didSimulatePhysics
{
    CGPoint pos = horizontalMoveNode.position;
    pos.y = fixedVerticalPosY;
    horizontalMoveNode.position = pos;
}

Add this method to your scene class and apply it to whichever node(s) you want to lock in at a given Y coordinate.

Upvotes: 5

Related Questions