我知道你可以通过在游戏开始时创建它们来预加载spritenodes,但有没有更有效的方法呢?
我正在尝试使用SKSpriteNode作为从一个场景到下一个场景的过渡.我怎样才能做到这一点?
[编辑]请注意,这适用于OSX而非iOS.iOS的touchesBegan方法似乎在OSX中不起作用.
for child in platformGroupNode.children {
CGPoint p = [child.superview convertPoint:child.center toNode:self.view ]
println(p)
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何与SKSpriteNode孩子和SKNode父母一起使用。
我也没有运气尝试过
for child in platformGroupNode.children {
var pos = child.position
var viewPos = convertPoint(pos, toNode: self.parent!)
if viewPos.x < 0 {
println("Out of screen")
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在屏幕上随机生成节点而不重叠,所以我决定找到每个节点彼此的距离/距离,并连续随机生成一个位置,其中每个节点的范围大于100,一旦范围超过100它将突破while循环并将节点添加到视图中
var p2Dp1: CGFloat = 0
var p3Dp1: CGFloat = 0
var p3Dp2: CGFloat = 0
planet1.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))
while p2Dp1 < 100.0 {
planet2.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))
p2Dp1 = SDistanceBetweenPoints(planet2.position, p2: planet1.position)
print(" planet 2 distance from 1: \(p2Dp1) ")
}
while p3Dp1 < 100.0 && p3Dp2 < 100.0 {
planet3.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))
p3Dp1 = SDistanceBetweenPoints(planet3.position, p2: planet1.position)
print(" …Run Code Online (Sandbox Code Playgroud) 我正在处理的应用程序有多个节点,这些节点会重复添加到游戏中.我一直在做的是使用纹理数组创建新的SKSpriteNodes,一旦添加了节点,我就为该节点分配一个特定的物理体.但我想要做的不是拥有一个纹理数组,而是拥有一个预先分配了物理主体的SKSpriteNodes数组.
我相信我已经弄清楚如何做到这一点,我遇到的问题是当我尝试将SKSpriteNode多次添加到场景时.
例如,下面是我一直在玩,有效,但如果我添加另一行addChild(arraySegment_Type1 [0]为SKSpriteNode),我收到一个错误,应用程序崩溃.
override func didMoveToView(view: SKView) {
anchorPoint = CGPointMake(0.5, 0.5)
var arraySegment_Type1:[SKSpriteNode] = []
var sprite = SKSpriteNode(imageNamed: "myimage")
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(sprite.size.width, sprite.size.height))
sprite.physicsBody?.dynamic = false
sprite.name = "mysprite"
arraySegment_Type1.append(sprite)
addChild(arraySegment_Type1[0] as SKSpriteNode)
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能从阵列多次加载SKSpriteNodes?
我通过调用一个创建SKSpriteNode子类实例的函数,从gameScene和其他对象中创建了一堆sprite.
例如,从GameScene,像这样:
let sizee = CGSize(width: 100, height: 100)
let posi = CGPoint(x: 200, y: 300)
func createSprite(){
let new = Circle(color: SKColor.blue, size: sizee , position: posi)
addChild(new)
new.zPosition = 2
}
Run Code Online (Sandbox Code Playgroud)
在Circle中,我在完成一些动画后删除每个实例:
import SpriteKit
class Circle: SKSpriteNode {
let fade = SKAction.fadeAlpha(to: 0.5, duration: 2)
let myScale = SKAction.scaleX(to: 3, duration: 2)
let die = SKAction.removeFromParent()
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: color, size: size)
}
convenience init(color: UIColor, size: CGSize, position: CGPoint) …Run Code Online (Sandbox Code Playgroud) 我正在改变这样的alpha价值,spriteNode
if (firstBody.node?.name)! == "Player" && secondBody.node?.name == "Alpha 1" {
var item: SKSpriteNode?
item = SKSpriteNode(imageNamed: "BG")
item!.alpha = 0.1
score += 1
scoreLabel?.text = String(score)
}
Run Code Online (Sandbox Code Playgroud)
文档(使用node.alpha = value)中提到了这一点,但我不确定为什么它不起作用。
我真的对此感到非常沮丧,我一直在努力让它工作近两天:(
如何快速向 SKSpriteNode 添加点击事件
let InstantReplay:SKSpriteNode = SKSpriteNode(imageNamed: "InstantReplay")
InstantReplay.position = CGPoint(x: size.width + InstantReplay.size.width/2, y: size.height/2)
InstantReplay.size = CGSize(width: size.width/1.4, height: size.height/8)
addChild(InstantReplay)
InstantReplay.runAction(SKAction.moveToX(size.width/2, duration: NSTimeInterval(1)))
Run Code Online (Sandbox Code Playgroud)
我想要发生的只是当点击“InstantReplay”来运行一个名为“InstantReplay_Clicked”的函数时,我将如何实现这个?
非常感谢任何帮助:)
我正在制作一个Sprite套件游戏.我有一个按钮,必须隐藏,而某些情况不会是真的.所以我将这个按钮添加到场景中并将其隐藏起来.那么哪种方式更好?要制作一个按钮,将其添加到场景并隐藏它?或者在需要时将它添加到场景中?
我有一个自定义类,它是一个子类SKSpriteNode.我试图覆盖spriteNodeWithColor:size:返回的方法instancetype.我试试这个:
-(instancetype)initWithColor:(UIColor *)color size:(CGSize)size{
self.color = color;
self.size = size;
//do other setup stuff here
return self;
}
Run Code Online (Sandbox Code Playgroud)
但它每次都会崩溃.在此先感谢您的帮助
inheritance objective-c instancetype sprite-kit skspritenode
skspritenode ×10
sprite-kit ×9
swift ×6
ios ×2
objective-c ×2
arrays ×1
button ×1
distance ×1
inheritance ×1
instancetype ×1
memory ×1
performance ×1
random ×1
range ×1
sknode ×1
skscene ×1