我想创造一个弹性盒子。像果冻一样的东西,任何击中它的东西也会反弹。我试过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}}
答案 0 :(得分:0)
将restitution
设置为1.02
将不起作用。 Apple文档声明:
该属性必须是介于0.0和1.0之间的值。默认值为0.2。
要增加对象的速度,只需获取节点的zRotation
并在该方向上施加一个小脉冲。冲动是CGVector
,here是将角度转换为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]];
此外,请勿使用_ball
但self.ball
:这可确保调用相应的getter / setter。
根据{{3}}:
通常,即使您从自己的实现中访问对象的属性,也应该使用访问器方法或点语法进行属性访问,在这种情况下,您应该使用self。 (...)此规则的例外情况是编写初始化,释放或自定义访问器方法时,如本节后面所述。