- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个游戏,你必须用彩弹枪射击从天上掉下来的不同敌人,“彩弹”是随机颜色,其中彩弹来自从 SKShapeNode 继承的类。我想在彩弹击中敌人时创建一个飞溅动画,如果每个彩弹的颜色相同,那么这样做会很简单。如何运行动画,其中帧的颜色继承原始项目符号的颜色?或者我可以使用 SKEmitterNode 类进行类似的操作吗?
这是 Bullet 类和 addBullet 类
class Bullet:SKShapeNode {
var color:SKColor?
var dx:CGFloat?
var dy:CGFloat?
var move:SKAction {
get {
if dx != nil && dy != nil {
return SKAction.moveByX(dx!, y: dy!, duration: 0.4)
} else {
return SKAction.moveByX(0, y: 0, duration: 0)
}
}
}
required override init() {
super.init()
let circle = CGRectMake(0, 0, 40, 40)
self.antialiased = true
self.setScale(0.5)
self.path = UIBezierPath(ovalInRect: circle).CGPath
self.lineWidth = 1
self.color = Random.randomColor()
if let c = self.color {
self.fillColor = c
self.strokeColor = c
} else {
self.fillColor = SKColor.whiteColor()
self.strokeColor = SKColor.whiteColor()
}
self.physicsBody = SKPhysicsBody(circleOfRadius: circle.width/2)
self.physicsBody.affectedByGravity = false
self.physicsBody.categoryBitMask = Collision.bulletCategory
self.physicsBody.contactTestBitMask = Collision.enemyCategory
}
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
}
func generateBullet(loc:CGPoint) {
let dx = loc.x - self.player.position.x
let dy = loc.y - self.player.position.y
let norm = CGVectorMake(dx, dy).normalize()
let b = Bullet()
b.dx = norm.dx * 600
b.dy = norm.dy * 600
let height = self.player.size.height/4
b.position = CGPointMake(self.player.position.x + norm.dx * height, self.player.position.y + norm.dy * height)
self.addChild(b)
b.runAction(b.move, completion: {
b.removeFromParent();
})
}
最佳答案
尝试将其添加到您的 SKScene 子类中...
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
// Add paintball splat at tap point
self.splat(location,color:self.pickColor())
}
}
func skRandf() -> Float {
return Float(Float(random()) / Float(RAND_MAX))
}
func skRand(low:Float, high:Float) -> Float {
return skRandf() * (high - low) + low;
}
func splat(location:CGPoint, color:SKColor) -> Void
{
let count = arc4random_uniform(7)+6
let node = SKNode.node()
let core = SKShapeNode(path: self.core())
core.position = location;
core.zRotation = CGFloat(skRand(0.0, high: Float(M_PI*2)))
core.xScale = CGFloat(skRand(0.1, high: 0.25))
core.yScale = CGFloat(skRand(0.1, high: 0.25))
core.fillColor = color
node.addChild(core)
for index in 1...count {
let shape = SKShapeNode(path:self.paintDrop())
shape.xScale = CGFloat(skRand(0.075, high: 0.15))
shape.yScale = CGFloat(skRand(0.05, high: 0.25))
shape.zRotation = CGFloat(skRand(0.0, high: Float(M_PI*2)))
shape.position = location
shape.fillColor = color
shape.strokeColor = color
node.addChild(shape)
}
self.addChild(node)
}
func core() -> CGPathRef
{
var bezierPath = UIBezierPath()
bezierPath.moveToPoint(CGPointMake(-19.5, -8.5))
bezierPath.addCurveToPoint(CGPointMake(-1.5, -16.5), controlPoint1: CGPointMake(-16.25, -16.25), controlPoint2: CGPointMake(-9.5, -14))
bezierPath.addCurveToPoint(CGPointMake(18.5, -8.5), controlPoint1: CGPointMake(6.5, -19), controlPoint2: CGPointMake(13.75, -16.25))
bezierPath.addCurveToPoint(CGPointMake(15.5, 12.5), controlPoint1: CGPointMake(23.25, -0.75), controlPoint2: CGPointMake(19.25, 5))
bezierPath.addCurveToPoint(CGPointMake(1.5, 20.5), controlPoint1: CGPointMake(11.75, 20), controlPoint2: CGPointMake(6.5, 20.5))
bezierPath.addCurveToPoint(CGPointMake(-13.5, 12.5), controlPoint1: CGPointMake(-3.5, 20.5), controlPoint2: CGPointMake(-9.25, 17.5))
bezierPath.addCurveToPoint(CGPointMake(-19.5, -8.5), controlPoint1: CGPointMake(-17.75, 7.5), controlPoint2: CGPointMake(-22.75, -0.75))
bezierPath.closePath()
return bezierPath.CGPath;
}
func paintDrop() -> CGPathRef {
var bezierPath = UIBezierPath()
bezierPath.moveToPoint(CGPointMake(-8.5, 81.5))
bezierPath.addCurveToPoint(CGPointMake(-15.5, 114.5), controlPoint1: CGPointMake(-9.5, 89.5), controlPoint2: CGPointMake(-15.5, 104.5))
bezierPath.addCurveToPoint(CGPointMake(1.5, 130.5), controlPoint1: CGPointMake(-15.5, 124.5), controlPoint2: CGPointMake(-8.5, 130.5))
bezierPath.addCurveToPoint(CGPointMake(17.5, 114.5), controlPoint1: CGPointMake(11.5, 130.5), controlPoint2: CGPointMake(17.5, 123.5))
bezierPath.addCurveToPoint(CGPointMake(9.5, 81.5), controlPoint1: CGPointMake(17.5, 105.5), controlPoint2: CGPointMake(10.5, 88.5))
bezierPath.addCurveToPoint(CGPointMake(9.5, 0.5), controlPoint1: CGPointMake(8.5, 74.5), controlPoint2: CGPointMake(9.5, 0.5))
bezierPath.addLineToPoint(CGPointMake(-8.5, 0.5))
bezierPath.addCurveToPoint(CGPointMake(-8.5, 81.5), controlPoint1: CGPointMake(-8.5, 0.5), controlPoint2: CGPointMake(-8.32, 80.09))
bezierPath.closePath()
return bezierPath.CGPath
}
func pickColor() -> SKColor
{
var color:SKColor
switch (arc4random_uniform(6)) {
case 0:
color = SKColor.greenColor()
case 1:
color = SKColor.blueColor()
case 2:
color = SKColor.yellowColor()
case 3:
color = SKColor.redColor()
case 4:
color = SKColor.purpleColor()
default:
color = SKColor.magentaColor()
}
return color
}
关于swift - 如何使用 SpriteKit swift 重新着色 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251968/
我正在尝试构建一个 SpriteKit 游戏,但它因错误而失败:“无法将模块“SpriteKit”加载为“Spritekit”” 我使用的是 Xcode 版本 6.3.2 (6D2105)。 最佳答案
如何在 spritekit swift 中更改碰撞时的 spritekit。 else if collidedBird.birdType == 6 { if U
我刚刚创建了一个新的 SpriteKit 项目,就遇到了砰!问题。我运行该项目时没有触及任何内容,并且应该如此,默认的 hello world 项目出现了。这方面一切都很好。现在,我创建了一个新的 C
当我使用 SpriteKit 创建视频对象时 let background = SKVideoNode(videoFileNamed: "Video.mov") 我只使用了一次命令: backgrou
出于某种原因,我无法将节点放置在屏幕的顶部或底部。我曾经能够使用 self.frame.height/2 很好地做到这一点,但现在我在景观中工作,这行代码不起作用。注意:我的 anchor 是 0.5
在场景中“缩小”的正确方法是什么。 我有一个物体,我施加一个冲动将它发射到屏幕上。例如,它会发射大约 100 像素,这按预期工作 - 增加它飞行的力量,增加它飞行的密度更少等等。 我遇到的问题是缩放,
是否可以更改粒子发射的频率。例如,如果我发射一个粒子,我可以让它每 5 秒或 10 秒发射一次吗? 我搜索了文档,但找不到任何内容。有解决方法吗?我想做这样的事情: emitter.partic
有谁知道一些开箱即用的库,它们可能会为 SKNode 提供诸如相机抖动之类的效果。 ? 如果没有,是否有一种简单的方法可以使用 Action 来实现相机抖动? 谢谢 最佳答案 我找到了一种使用 SKA
我目前一直在使用委托(delegate)和 SKView 自定义类来监视我的 OS X SpriteKit 游戏中的按键。我需要为我的键盘监控类雇用多个代表,我知道这是不可能的,但可以通过使用观察者来
我从事 SpriteKit 游戏已经有一段时间了,但我有一个无法摆脱的恼人问题。我不想过多介绍这款游戏,但它非常简单。我每秒生成一些对象(SKSpriteNodes),这些对象使用 SpriteKit
我正在制作基于SpriteKit的多级游戏。 一切正常,除了一件事:当用户玩很长时间、改变很多关卡等时......然后 SpriteKit 开始丢失纹理。 我的意思是,没有像图像加载失败时那样的大红叉
我正在尝试将 SKSprite Particle Emitter 与 Swift 一起使用。 但我想在我的发射器中使用许多不同的纹理。 是否有可能:拥有许多图像,并且让发射器随机使用图像,而不是仅使用
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我正在用SpriteKit构建我的第一个项目,但我无法弄清楚这部分。 我的项目包括飞入屏幕的敌方直升机。每个敌人播放大约14秒长的声音文件。这不是循环。它包括敌人进入屏幕之前接近的声音,以及在屏幕上移
我试图在代码中到处搜索:解释文档在进入后台时会做什么,或者甚至有时会暂停,但无济于事-有人可以指导我在进入后台时建议做什么到启用 Sprite 套件的游戏中的背景吗? 我应该调用scene.pause
我是 SpriteKit 新手。我需要通过 UIImageView 或 SpriteNode 显示图像(它是游戏的背景图像)。但是,我需要用户能够放大背景并平移。我在不使用 SpriteKit 的情况
在我的游戏中,我正在创建一些受重力影响的球。当游戏开始时,他们会从屏幕外掉下来,并在底部找到自己的位置。没有其他力施加在他们身上。 问题是我正在用精确的坐标、精确的物理属性创建这些球,但结果不一样。它
我想让我的宇宙飞船有一条跟随它的粒子轨迹。我该怎么做? 这是我的宇宙飞船的代码: override func didMove(to view: SKView) { spaceS.positio
我正在尝试制作一个动画角色,可以在不移动他的躯干的情况下伸手去拿屏幕上的东西。 如果他够不到,他的手应该朝这个方向移动最大量,然后被他的静态躯干的物理限制所抵消。 所以在我的代码中,绿色矩形( han
我的场景上有player对象,并试图对其施加一些力。您可以看到我正在对update:文件上的MyScene.h方法施加作用力。但是,我的player根本没有动。发生了什么? 下面是Player SKS
我是一名优秀的程序员,十分优秀!