SKSpriteNode 没有名为“”的成员 - 如何访问在我的 spawn 方法中声明的变量?
SKSpriteNode does not have member named ''- how to access a variable declared in my spawn method?
我之前问过另一个关于如何在 Swift 中访问全局变量的问题,但意识到全局变量对我的目的不起作用。一些背景:
该游戏是 math/match 游戏。玩家将有一个等式,他们必须得到答案匹配的羊。
我在屏幕上生成了绵羊。每只羊都有一个唯一的整数值 (1-12),它是在我的 spawnSheep 方法中生成的:
var sheepValue: Int = Int(arc4random_uniform(UInt32(12))+1)
多只羊会在屏幕上生成 - 所以每只羊都需要自己的价值。以前,sheepValue 的全局变量会将所有羊的值更新为最近生成的羊,从而否定所有羊的任何形式的 'unique' 数字。我将值转换为字符串,每只羊都可以看到这些值。
这里是我试图访问 sheepValue 函数之外的一个片段,它声明于:
func checkCollisions() {
var hitSheep: [SKSpriteNode] = []
enumerateChildNodesWithName("sheep") { node, _ in
let sheep = node as SKSpriteNode
if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
if sheep.sheepValue == self.equation {
hitSheep.append(sheep)
}
sheep.sheepValue报错:'SKSpriteNode does not have member named "sheepValue"
但据我所知,我可以为我的 SKSpriteNode(羊)设置属性并以该语法访问它。但不是variables/ints?我不确定我做错了什么。
一些其他的想法——我可以只使用字符串值来检查 sheepValues 吗??
如果羊的 sheepValue 为 5,则“5”会打印在羊身上和控制台中。此字符串值已保存,并按照我希望 int var 的方式进行操作。我正在考虑只使用字符串值来检查 sheepValue 是否等于玩家的方程式。但这将涉及将更多的整数转换为更多的字符串,这需要更多的工作。
我理解你的解释有误
import UIKit
class SKSpriteNode {
var spriteTest:String = "SpriteKitTeste";
}
class Sheep: SKSpriteNode
{
var sheepTest:String = "SheepTest";
}
let sheep = Sheep();
let someSprite:SKSpriteNode = sheep;
println(someSprite.sheepTest); //SKSpriteNode does not have a member named 'sheepTest';
超级 class SKSpriteNode 无法访问 Sheep class.
的属性或方法
解决这个问题很简单,你需要先转换为class,或者如果你使用swift语言可以理解什么是正确的类型。
let someSheepSprite = sheep as Sheep;
println(someSheepSprite.sheepTest);
在您的代码中,我相信问题将得到解决,更改投射线
func checkCollisions() {
var hitSheep: [SKSpriteNode] = []
enumerateChildNodesWithName("sheep") { node, _ in
let sheep = node as Sheep // <<<<<<< this line
if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
if sheep.sheepValue == self.equation {
hitSheep.append(sheep)
}
我之前问过另一个关于如何在 Swift 中访问全局变量的问题,但意识到全局变量对我的目的不起作用。一些背景:
该游戏是 math/match 游戏。玩家将有一个等式,他们必须得到答案匹配的羊。
我在屏幕上生成了绵羊。每只羊都有一个唯一的整数值 (1-12),它是在我的 spawnSheep 方法中生成的:
var sheepValue: Int = Int(arc4random_uniform(UInt32(12))+1)
多只羊会在屏幕上生成 - 所以每只羊都需要自己的价值。以前,sheepValue 的全局变量会将所有羊的值更新为最近生成的羊,从而否定所有羊的任何形式的 'unique' 数字。我将值转换为字符串,每只羊都可以看到这些值。
这里是我试图访问 sheepValue 函数之外的一个片段,它声明于:
func checkCollisions() {
var hitSheep: [SKSpriteNode] = []
enumerateChildNodesWithName("sheep") { node, _ in
let sheep = node as SKSpriteNode
if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
if sheep.sheepValue == self.equation {
hitSheep.append(sheep)
}
sheep.sheepValue报错:'SKSpriteNode does not have member named "sheepValue"
但据我所知,我可以为我的 SKSpriteNode(羊)设置属性并以该语法访问它。但不是variables/ints?我不确定我做错了什么。
一些其他的想法——我可以只使用字符串值来检查 sheepValues 吗?? 如果羊的 sheepValue 为 5,则“5”会打印在羊身上和控制台中。此字符串值已保存,并按照我希望 int var 的方式进行操作。我正在考虑只使用字符串值来检查 sheepValue 是否等于玩家的方程式。但这将涉及将更多的整数转换为更多的字符串,这需要更多的工作。
我理解你的解释有误
import UIKit
class SKSpriteNode {
var spriteTest:String = "SpriteKitTeste";
}
class Sheep: SKSpriteNode
{
var sheepTest:String = "SheepTest";
}
let sheep = Sheep();
let someSprite:SKSpriteNode = sheep;
println(someSprite.sheepTest); //SKSpriteNode does not have a member named 'sheepTest';
超级 class SKSpriteNode 无法访问 Sheep class.
的属性或方法解决这个问题很简单,你需要先转换为class,或者如果你使用swift语言可以理解什么是正确的类型。
let someSheepSprite = sheep as Sheep;
println(someSheepSprite.sheepTest);
在您的代码中,我相信问题将得到解决,更改投射线
func checkCollisions() {
var hitSheep: [SKSpriteNode] = []
enumerateChildNodesWithName("sheep") { node, _ in
let sheep = node as Sheep // <<<<<<< this line
if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
if sheep.sheepValue == self.equation {
hitSheep.append(sheep)
}