我之前问了另外一个关于如何在Swift中访问全局变量的问题,但是我意识到全局变量对我的目的不起作用。一些背景:
这是一场数学/比赛的游戏。玩家将有一个等式,他们必须得到与之匹配的答案。
我有在屏幕上产卵的羊。每只羊拥有一个在我的spawnSheep方法中生成的唯一int值(1-12):
var sheepValue: Int = Int(arc4random_uniform(UInt32(12))+1)多只羊会在屏幕上产卵,所以每个羊都需要自己的价值。在此之前,sheepValue的全局变量将将所有绵羊的值更新为最近生成的绵羊,从而否定了所有绵羊的任何形式的“唯一”数字。我把这些值转换成字符串,在每只羊身上都是可见的。
下面是我试图在函数之外访问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没有成员名为"sheepValue“
但据我所知,我可以将属性设置为我的SKSpriteNode (绵羊),并以该语法访问它。但不是变量/ints?我不知道我做错了什么。
还有一些其他的想法--我可以使用字符串值来检查sheepValues吗?如果一只羊的sheepValue值为5,那么'5‘就会印在羊上和控制台上。保存这个字符串值,并执行我希望int var如何操作的操作。我正在考虑使用字符串值来检查sheepValue是否等于播放器的等式。但这将涉及到将更多的ints转换成更多的字符串,这需要更多的工作。
发布于 2015-03-04 20:14:17
我理解你的解释是错误的
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';超类SKSpriteNode无法从Sheep类访问属性或方法。
要解决这个问题非常简单,你需要先转换为类,或者如果你使用了斯威夫特,语言可以理解什么是正确的类型。
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)
}https://stackoverflow.com/questions/28863229
复制相似问题