- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我从 SKSpriteNode 继承了以下对象
class PlayingCard : SKSpriteNode
{
var suit:Int = 0
var rank:Int = 0
var visible:Bool = false
init()
{
super.init(
texture: SKTexture(imageNamed: "card.png"),
color: NSColor.blackColor(),
size: SKTexture(imageNamed: "card.png").size())
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func updateSprite()
{
if (suit == 1 && rank ==1)
{ self.texture = SKTexture(imageNames: "ace_of_clubs.png") }
.
.
.
.
// A bunch of switches and if's to assign the right image
}
}
现在我初始化这个类并将它添加到我的场景中。一切正常,卡片出现了。除了当我点击后寻找 self.nodeAtPoint(location)
时,我得到了一个 SKNode
!!我的值(value)观都丢了吗?这是怎么回事?
override func mouseDown(theEvent: NSEvent)
{
// Called when a mouse click starts
let location = theEvent.locationInNode(self)
let t = self.nodeAtPoint(location)
NSLog("%s",String(t.suit)) //<-------- Won't Compile
}
知道怎么做吗?尝试使用以下方式进行类型转换:t as! PlayingCard
构建项目,但我在日志中打印出乱码。
这是枚举和 PlayingCards 类:
enum Suits:Int
{
case Diamond, Heart, Club, Spade
}
enum Ranks:Int
{
case ace, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king
}
class PlayingCards : SKSpriteNode
{
var CardRank:Ranks = Ranks.ace
var CardSuit:Suits = Suits.Club
var Visible:Bool = false
//var Sprite:SKSpriteNode
init()
{
super.init(texture: SKTexture(imageNamed: "b1fv.png"), color: NSColor.blackColor(), size: SKTexture(imageNamed: "b1fv.png").size())
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func updateSprite()
{
self.name = Description(Set: 2)
if self.Visible
{
self.texture = SKTexture(imageNamed: generateSpriteFilename())
} else {
self.texture = SKTexture(imageNamed: "b1fv.png")
}
}
func generateSpriteFilename() -> String
{
return self.Description(Set: 2) + ".png"
}
func Description(Set s:Int) -> String
{
var cr = ""
var cs = ""
switch self.CardRank
{
case .ace:
cr = (s == 1) ? "ace" : "1"
break
case .jack:
cr = (s == 1) ? "jack" : "j"
break
case .king:
cr = (s == 1) ? "king" : "k"
break
case .queen:
cr = (s == 1) ? "queen" : "q"
break
default:
cr = String(self.CardRank.rawValue + 1)
}
switch self.CardSuit
{
case .Club:
cs = (s == 1) ? "clubs" : "c"
break
case .Diamond:
cs = (s == 1) ? "diamonds" : "d"
break
case .Heart:
cs = (s == 1) ? "hearts" : "h"
break
case .Spade:
cs = (s == 1) ? "spades" : "s"
break
}
return (s == 1) ? cr + "_of_" + cs : cs + cr
}
}
这是我填充数组的方式:
func prepareDeck() -> [PlayingCards]
{
var deck = [PlayingCards]()
for i in 0...3
{
let s:Suits = Suits(rawValue: i)!
for j in 0...12
{
let r:Ranks = Ranks(rawValue: j)!
let c:PlayingCards = PlayingCards()
c.CardRank = r
c.CardSuit = s
deck.append(c)
}
}
return deck
}
最佳答案
nodeAtPoint
方法会返回一个 SKNode
。
当然我们知道节点可以更具体,但在编译时我们只能说它将是一个 SKNode
。
现在,如果您认为该对象比简单的 SKNode(如 PlayingCard
)更具体,您可以尝试将该节点转换为您的类型。
override func mouseDown(theEvent: NSEvent) {
let location = theEvent.locationInNode(self)
let node = self.nodeAtPoint(location)
if let playingCard = node as? PlayingCard {
// here you have your PayingCard object!
print(playingCard.suit)
}
}
在上面的代码中,只有当检索到的节点是 PlayingCard
时,才会输入 IF
的主体。在这种情况下,将创建一个类型为 PlayingCard
的新常量 playingCard
。因此,在 IF
的主体内,您可以使用在 PlayingCard
类中定义的所有方法和属性。
关于swift - 如何从单击返回 SKSpriteNode 子类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972095/
我正在创建一个游戏,用户可以在场景中移动一些水果。我希望用户只能移动场景中的水果,而不能移动场景中的任何其他 SKSpriteNode,因此我编写了下面的代码来实现它。然而,代码无法正常工作,因为我似
我正在尝试制作一款游戏,您可以倾斜手机并尝试将球保持在边界内。我似乎无法弄清楚如何让球不通过边界。我有倾斜来移动球,但它只是穿过我的所有边界,我似乎无法弄清楚如何让球在接触到边界时停止。这是我的代码:
我的代码遇到了一些问题。我正在尝试使用以下代码让僵尸跟随我的玩家: class GameScene: SKScene, SKPhysicsContactDelegate { func Enem
我正在尝试将一个 sprite 节点旋转到另一个。它旋转但不好。我该如何解决? 我试过: let blaster = self.childNode(withName: blaster) let cur
我如何获取一个 SKSpriteNode 及其所有子 SKSpriteNode 并将它们合并为一个没有子节点的扁平化 SKSpriteNode? 谢谢。 最佳答案 创建节点的纹理并从该纹理创建一个新的
对于我正在创建的游戏,SKSpriteNode 逐渐向下移动到用户屏幕上。屏幕底部附近还有另一个 SKSpriteNode(位置是静态的),只为原始 SKSpriteNode 留出一点空间。我需要检测
使用 swift,我试图让一个 SKSpriteNode(没有物理体)跟随另一个有物理体的 SKSpriteNode。当 Sprite 与一个物理体和另一个物理体接触时,我希望这样做。我阅读了有关设置
我有一条拿着蛋的龙。 EggNode 是 DragonNode 的子节点。 龙水平飞过屏幕。 当龙到达屏幕最右侧时,龙会重置到屏幕最左侧。 我已经实现了龙将鸡蛋扔到地面炮塔的位置。龙使用这个函数在to
/image/JQ9r6.png 在上面您可以看到我的游戏的图像。我有敌人生成并沿 y 轴向下移动。玩家应该在敌人到达墙壁之前将其击落。现在,玩家正在旋转到触摸的位置。我想要的是让子弹的旋转方向与旋转
我试图弄清楚 SKSpriteNode 已完全迭代另一个 SKSpriteNode。 这是我迄今为止想出的代码, if (node.frame.maxY == player.frame.minY) {
正如标题所说,有没有办法做这种事情: 有什么办法吗?如果是这样,我如何将 SKAction rotateToAngle 对应到面向圆的一侧? 谢谢! 最佳答案 圆在任何给定点的切线垂直于绘制到该点的半
对于令人困惑的问题标题,我深表歉意,但我不太确定如何表述我的问题。我的最终目标是在创建 SKSpriteNode 一定时间后删除它。但是,有一个小并发症。使用以下代码 func remove() {
我正在制作一个球必须遵循特定路径的游戏。如果它偏离正轨,他们就输了。问题是我不知道如何测试球是否偏离了路径。我尝试使用 node.intersectsNode(background) 但由于背景覆盖了
就问标题问,我想知道这是否完全可能。大多数 SKCropNode 示例使用纹理或形状。我想要完成的是自定义形状的面具。如果有办法,请告诉我! 最佳答案 您可以通过为节点提供一个子节点来屏蔽节点,其中子
这里的代码子类化 SKSpriteNode 并初始化它接受 SKScene import SpriteKit class Spaceship: SKSpriteNode{ var spaceship:
我的目标:让一个 SKSpriteNode 移动到另一个 SKSpriteNodes 的位置。 (为我的 sprite kit 游戏创建磁铁) 嗨,我正在尝试让多个同名的 SKSpriteNode 移
我正在使用 Xcode 开发应用程序,目前遇到有关 SKSpriteNodes 的问题。当有多个 SKSpriteNode 且该节点被触摸时,被触摸的节点不会被移除,但另一个未被触摸的节点会被移除。我
我有一个 SKScene,我要在其中添加一个 SKSpriteNode。我已经子类化 SKSpriteNode 类来创建这个节点。在子类中,我在 Sprite 上定义了某些 SKActions。我想要
我需要在我的项目中检测接触,但我有 9 个方 block 要检测接触。有没有一种方法可以在不创建 9 个不同的物理体或类似物理体阵列的情况下检测接触。此外,每当圆圈接触到一个正方形时,该正方形就会变色
我的游戏中有一个角色,它是一个带有几个子 SKSpriteNodes 的 SKSpriteNode,因此我可以为角色的各个部分(手、脚等)设置动画,它还有 1 个 SKSpriteNode(尝试用 S
我是一名优秀的程序员,十分优秀!