ios - Simple collision in Sprite Kit -
i have 2 nodes. player , enemy. want enemy node follow player node once it's close enough , enemy node stop when collides player node. , enemy node goes on top of player , both nodes gets pushed. thought somehow stopping enemy node moving on collision player seems me should cleaner way.
(i move enemy node changing possition on update).
here's gamescene.sks:
-(void)didmovetoview:(skview *)view { player = [self childnodewithname:@"character"]; enemy = [self childnodewithname:@"enemy"]; self.physicsworld.contactdelegate = self; } -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event { (uitouch *touch in touches) { movetotouch = [touch locationinnode:self]; sknode *tile = [self nodeatpoint:movetotouch]; if([tile.name isequaltostring:@"tile"]) { movetotouch = tile.position; } } } -(void)update:(cftimeinterval)currenttime { [self walk:player to:movetotouch]; if((sdistancebetweenpoints(enemy.position, player.position) < 200)) { [self walk:enemy to:player.position]; } } -(void)walk:(sknode*)node to:(cgpoint)moveto { if (cgpointequaltopoint(moveto, cgpointzero)) { return; } if(round(moveto.y) != round(node.position.y)) { if(moveto.y > node.position.y) { node.position = cgpointmake(node.position.x,node.position.y+2); } else if (moveto.y < node.position.y) { node.position = cgpointmake(node.position.x,node.position.y-2); } }else if(round(moveto.x) != round(node.position.x)) { if(moveto.x > node.position.x) { node.position = cgpointmake(node.position.x+2,node.position.y); } else if (moveto.x < node.position.x) { node.position = cgpointmake(node.position.x-2,node.position.y); } } float distance = sdistancebetweenpoints(node.position, moveto); if (distance < 1.0){ movetotouch = cgpointzero; } }
i don't know how have set enemy follows player. try
- set enemy dynamic false
- or put velocity 0
use collision detection know when collided.
Comments
Post a Comment