SpriteKit弹力盒

时间:2014-01-31 13:11:22

标签: ios objective-c sprite-kit

我想创造一个弹性盒子。像果冻一样的东西,任何击中它的东西也会反弹。我试过physicsBody.restitution但是它不起作用,因为它似乎是一个对象的弹性,如果它碰到另一个对象。但我想要的是如果被物体击中它的弹性。

正在查看docs并没有找到任何内容。有人对制作这样的东西有任何想法吗?

我现在有一个球和一个块(乒乓球比赛)进行练习,我希望每次碰到一个球时球的反弹速度会快一些。所以我在球上添加了restitution 1.02_ball.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:ballPath]; _ball.physicsBody.friction = 0.f; _ball.physicsBody.restitution = 1.02f; _ball.physicsBody.linearDamping = 0.f; _ball.physicsBody.allowsRotation = NO; _ball.physicsBody.affectedByGravity = NO; 。是吗?

_block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_block.size];
_block.physicsBody.friction = 0.f;
_block.physicsBody.restitution = 0.f;

我也有应该被球击中的积木,这些积木都是果冻所以它应该更加弹跳,但是补充它并不能改变场景中的任何东西。

{{1}}

1 个答案:

答案 0 :(得分:0)

归还

restitution设置为1.02将不起作用。 Apple文档声明:

  

该属性必须是介于0.0和1.0之间的值。默认值为0.2。

要增加对象的速度,只需获取节点的zRotation并在该方向上施加一个小脉冲。冲动是CGVectorhere是将角度转换为CGVectors的一些有用的代码。

[ball.physicsBody applyImpulse:impulse];

果冻

关于果冻效果,我建议调查SKTUtils categories provided by Ray Wenderlich。示例项目演示了几种类似于您需求的效果。

该代码提供了大量新的计时功能,而不是SpriteKit目前支持的功能,例如弹性,立方和反弹。考虑在碰撞后对“果冻”物体应用弹性缩放功能。

#import "SKNode+SKTExtras.h"
#import "SKTEffects.h"

SKTScaleEffect *scaleEffect = [SKTScaleEffect effectWithNode:node duration:0.25f startScale:1.5f endScale:1.5f];
scaleEffect.timingFunction = SKTTimingFunctionElasticEaseOut;
[node runAction:[SKAction actionWithEffect:scaleEffect]];

数据封装

此外,请勿使用_ballself.ball:这可确保调用相应的getter / setter。 根据{{​​3}}:

  

通常,即使您从自己的实现中访问对象的属性,也应该使用访问器方法或点语法进行属性访问,在这种情况下,您应该使用self。 (...)此规则的例外情况是编写初始化,释放或自定义访问器方法时,如本节后面所述。