2017-06-12 3 views
1

Je développe actuellement un jeu IOS en utilisant SpriteKit.SKShapeNode mise à jour physique corps sur le toucher

J'ai un arrière-plan qui est SKShapeNode. Fondamentalement, le chemin de cette forme est un bezierPath avec quelques courbes. Ce chemin peut être mis à jour par le joueur en utilisant le déclencheur TouchBegan ou TouchMove. Lors de la mise à jour du chemin de l'arrière-plan, d'autres SKNodes peuvent entrer dans mon arrière-plan pendant la mise à jour du chemin de l'arrière-plan. Disons que nous avons le plancher d'une table à y0 (position verticale d'origine) avec quelques cases (SKNodes). Lors de la mise à jour de la physique de la table vers une autre position verticale (par exemple y0 + deltaY), les boîtes (qui sont affectées par la gravité) tombent au bas de l'écran.

Comment puis-je empêcher cela? Je veux mettre à jour la physique de la table mais je veux que les boîtes restent sur elle.

Short video of the current issue

Merci,

+1

Qu'est-ce comportement réellement? Veuillez décrire un problème mieux, par exemple. ajouter quelques images, animation ... Désolé mais la question n'est pas claire et à partir du code fourni on ne peut pas dire quel est le problème. Ma meilleure supposition est que vous avez un problème avec la configuration des masques bit de collision ... – Whirlwind

+0

J'ai édité mon post. Pas sûr que je suis très clair .. @Whirlwind –

+0

Bon maintenant c'est un peu plus clair. La mise à jour du corps physique est toujours une chose. Avez-vous réglé correctement les masques lorsque vous recréez des limites? – Whirlwind

Répondre

0

Dans votre gamescene:

func keepBallOnTable() { 
    if ball.frame.minY < table.frame.maxY { 
    ball.position.y = table.frame.maxY + (ball.size.height/2) + 1 
    } 
} 

override func didFinishUpdate() { 
    keepBallOnTable() 
} 

Vous devrez traduire par objc: P

Video results of implementation

gist of the whole gamescene

Physicsbody et des choses comme .moveTo et .position ne se mélangent pas très bien. Vous devrez combattre le système de physique chaque fois que vous essayerez de les mélanger. Par conséquent, la fonction que j'ai créé ci-dessus :)

+1

OK merci pour votre temps, je vais essayer bientôt! –

+0

@Johnsmith cette réponse a-t-elle fonctionné pour vous? Si ce n'est pas le cas, faites le moi savoir et je peux essayer de le mettre à jour. – Fluidity