我想创建一个增加尺寸的墙。但是当我增加尺寸时,物理体不会跟随(它保持相同的大小)。所以我有一个想法,一个永远重复的SKAction执行一个选择器,根据物体的大小调整物理体的大小。
所以我想制作一个类似的代码:
-(void) sizeChange:(SKSpriteNode *)sprite{
sprite.physicsbody = [SKPhysicsBody bodyWithRectangleOfSize: sprite.size];
}
现在我想运行一个执行选择器的SKAction。所以我写了这个:
SKAction *perform = [SKAction performSelector:@selector(sizeChange:) withObject: sprite onTarget: self];
[self runAction:[SKAction repeatActionForever:perform]];
SKAction不适用于“WithObject”。如何将参数添加到performSelector SKAction?
谢谢!
修改
基本上我想要SKAction等价:
[self performSelector:@selector(sizeChange:) withObject:sprite];
或者永远重复代码的方法。谢谢!
答案 0 :(得分:4)
查看SKAction
的{strong> customActionWithDuration:actionBlock:
方法,该方法会创建一个持续时间内执行阻止的操作。您可以在操作块中指定自定义代码。
+ (SKAction *)customActionWithDuration:(NSTimeInterval)seconds
actionBlock:(void (^)(SKNode *node,
CGFloat elapsedTime))block
或者,您也可以使用runBlock:
方法。
SKAction* blockAction = [SKAction runBlock:^
{
// your code here
}];
[someNode runAction:blockAction];
答案 1 :(得分:0)
这让我困扰了一段时间,但这个问题有一个简单的解决方法。
首先创建SKAction,像这样永远重复(在你需要延迟方法执行的情况下):
-(void)resizingMySprite
{
//Set duration as long as you want. In my case I needed as low as possible)
SKAction *wait = [SKAction waitForDuration:0.01];
SKAction *performSelector = [SKAction performSelector:@selector(resizing)];
SKAction *sequence = [SKAction sequence:@[performSelector, wait];
SKAction *repeat = [SKAction repeatActionForever:sequence];
[self runAction:repeat];
}
然后创建方法大小调整,在其中运行带参数的方法:
-(void)resizing
{
//Let's say you wish to run your method on sprite called mySprite
[self sizeChange:mySprite];
}