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)

    }