在 SKSpriteNode 中调用自定义方法不起作用

Posted

技术标签:

【中文标题】在 SKSpriteNode 中调用自定义方法不起作用【英文标题】:Calling Custom Method Inside SKSpriteNode Not Working 【发布时间】:2015-11-08 21:30:39 【问题描述】:

我有一个自定义的 SKSpriteNode 对象,并想在其中调用自定义方法“设置默认值”。

#import <SpriteKit/SpriteKit.h>

@interface Platform : SKSpriteNode

- (instancetype)initWithDynamicPlatform;
- (void)setDefaults;

@end

在.m文件中

#import "Platform.h"

@implementation Platform

- (instancetype)initWithImageNamed:(NSString *)name 
if (self == [super initWithImageNamed:name]) 
    NSLog(@"Initiated Platform");

return self;


- (instancetype)initWithDynamicPlatform 

if (self == [super initWithImageNamed:@"Platform2"]) 
    NSLog(@"Initiated Platform");


[self setDefaults];

return self;


- (void)setDefaults 

/**
 * Set the name
 */

self.name = @"Platform";

/**
 * Set the effect of gravity on the platform
 */

self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;


 

 @end

问题是我无法从 SKScene 文件访问自定义方法。

- (void)loadDynamicPlatform 

SKSpriteNode *spritePlatform = [[Platform alloc] initWithDynamicPlatform];    

[spritePlatform setDefaults];

[self addChild:spritePlatform];
[self movePlatform:spritePlatform];


我收到错误消息

"/Users/****/Desktop/Apps/****/****/GameScene.m:142:21: 'SKSpriteNode' 没有可见的@interface 声明选择器 'setDefaults'"

知道为什么我无法访问它。我确定我设置正确。

【问题讨论】:

你在#import "Platform.h"GameScene.m 吗? 是的,在 GameScene.m 文件中 【参考方案1】:

您必须声明一个“平台”变量或将“SKSpriteNode”转换为“平台”:

Platform *spritePlatform = [[Platform alloc] initWithDynamicPlatform];    

[spritePlatform setDefaults];

【讨论】:

啊,谢谢。我现在更改了代码,它可以工作了。 太好了。乐于助人

以上是关于在 SKSpriteNode 中调用自定义方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Xcode7场景编辑器SKSpriteNode自定义类

将物理应用到自定义 SKSpriteNode 类

需要帮助更改在 didMoveToView 中调用的 SKSpriteNode 的速度、方向和生成时间

如何使用该节点的自定义类检测在单独场景中创建的 skspritenode 上的触摸

如何在继承 SKSpritenode 的类中拥有图像

更改 SKSpriteNode 图像的颜色?