- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要帮助想出一些方法来让新生成的敌方舰艇都发射子弹。问题是我实际上不知道该怎么做。我尝试使用可变计时器,但是它只能射出一条直线,而且我无法真正控制它产生的位置。
Game Picture: There are more enemies spawning我尝试过的:
var EnemyTimer = Foundation.Timer.scheduledTimer(timeInterval:0.3,目标:self,选择器:#selector(GameScene.spawnBullet3),userInfo:nil,重复:true)
还尝试过:
}
func spawnBullet3(){
let Bullet = SKSpriteNode(imageNamed: "eBullet.png")
Bullet.setScale(1)
Bullet.zPosition = -1
Bullet.position = CGPoint(x: enemy.position.x, y: enemy.position.y)
let action = SKAction.moveTo(y: self.size.height + 100, duration: 0.5)
let actionDone = SKAction.removeFromParent()
Bullet.run(SKAction.sequence([action, actionDone]))
Bullet.physicsBody = SKPhysicsBody(rectangleOf: Bullet.size)
Bullet.physicsBody?.categoryBitMask = PhysicsCategories.Bullet
Bullet.physicsBody!.collisionBitMask = PhysicsCategories.None
Bullet.physicsBody?.contactTestBitMask = PhysicsCategories.Enemy
Bullet.physicsBody?.affectedByGravity = true
Bullet.physicsBody?.isDynamic = false
self.addChild(Bullet)
}
最佳答案
好吧,对于初学者来说,(正如 LearnCocos2D 精彩地解释的 here ) 从不使用 Timer
、performSelector:afterDelay:
,或 Grand Central Dispatch(GCD,即任何 dispatch_...
方法。
在进行任何操作之前,您必须设置几件事:
首先,将参数添加到您的spawnBullet3函数中(如果您使用自定义类,请将enemy:SKSpriteNode
替换为enemy:yourCustomClass
) .
func spawnBullet3(enemy:SKSpriteNode){
let Bullet = SKSpriteNode(imageNamed: "eBullet.png")
Bullet.setScale(1)
Bullet.zPosition = -1
Bullet.position = CGPoint(x: enemy.position.x, y: enemy.position.y)
let action = SKAction.moveTo(y: self.size.height + 100, duration: 0.5)
let actionDone = SKAction.removeFromParent()
Bullet.run(SKAction.sequence([action, actionDone]))
Bullet.physicsBody = SKPhysicsBody(rectangleOf: Bullet.size)
Bullet.physicsBody?.categoryBitMask = PhysicsCategories.Bullet
Bullet.physicsBody!.collisionBitMask = PhysicsCategories.None
Bullet.physicsBody?.contactTestBitMask = PhysicsCategories.Enemy
Bullet.physicsBody?.affectedByGravity = true
Bullet.physicsBody?.isDynamic = false
self.addChild(Bullet)
}
其次,创建一个公共(public)敌人数组(同样,如果您使用自定义类,请将 SKSpriteNode 替换为您的自定义类名称)。
var enemies:[SKSpriteNode] = []
接下来,每次创建新敌人时,将敌人追加到数组中
enemies.append(newEnemy)
现在您有两个选择:
选项 1:使用 SKAction
使用 SKAction 计时器自动每隔几秒射击一次敌人(将 SKAction.waitForDuration(2.5)
替换为 SKAction.waitForDuration(yourAmountOfSeconds)
).
for e in enemies
{
var wait = SKAction.waitForDuration(2.5)
var run = SKAction.runBlock {
spawnBullet3(e)
}
e.runAction(SKAction.repeatActionForever(SKAction.sequence([wait, run])))
}
选项 2:使用更新
功能
使用update
函数中的currentTime(将currentTime.truncatingRemainder(dividingBy: 3)
替换为currentTime.truncatingRemainder(dividingBy: yourAmountOfSeconds)
).
override func update(_ currentTime: TimeInterval) {
[...]
if currentTime.truncatingRemainder(dividingBy: 3) == 0
{
for e in enemies
{
spawnBullet3(e)
}
}
}
关于ios - 雪碧包 : how to make newly spawned enemy ships shoot bullets at player?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40458266/
我有这段代码(运行 jQuery 1.4.2) var elementToAdd = $('').html('header'); var p = $('').html('hello world');
我正在使用 NSIS 构建程序安装程序。可执行文件名为 XYZ.exe,我想将其安装在“$PROGRAM_FILES/XYZ 1.0/”中。我还在菜单开始中创建快捷方式:“$MENU_START/XY
我收到了来自 Android Market 的电子邮件,其中宣布了新的内容分级政策并包含指向 this page 的链接.所以我尽职尽责地准备了一个应用程序更新并将其上传到草稿状态,但是到底有什么方法
就良好的 REST API 设计而言,返回 id 是否是个好主意?新创建的资源?假设我有一个 API: api/resource POST 我见过一些大师有这样的 API 来返回空 json 并将 U
我有两个 Remote - origin 指向我的 fork 和 上游 指向公司 repo 。 $git remote -v origin https://github.com/me/
为什么我创建的模型实例在之后直接从 celery 任务查询时没有找到?例如: # app.views model = Model.objects.create() # I create my l
我克隆了一个空的 git 存储库。我已经把我的整个 xcode 应用程序放在了。现在我想将这些项目推送到服务器,然后它显示文件夹未跟踪。 请查看随附的屏幕截图。该文件夹包含多个文件和子文件夹。 最佳答
我的问题很简单,就在标题中! 这是我的代码: userCreate: function(button) { var grid = button.up('panel'), sto
我的网页中有一个 html 表格。它充满了我的数据库中的信息。 它有这样的结构: Id- Title –Author 1 – Africa – John Smith 2- Europe- Martin
我在 code 上工作.它工作成功。但我面临的问题是: 新列在列表中不可见(我尝试使用 With Setting Required = "TRUE")。 我尝试比较可见列和不可见列的字段值。我发现的区
我使用 SKAction waitForDuration 每 5 秒生成一个 sprite self.addChild(enemy) 如何访问最近生成的 Sprite 的位置? 最佳答案 每次生成 S
我正在尝试学习如何使用 KnockOut...以前从未使用过,并且我已经在已经使用它的网站上陷入困境。这里一切正常: function MasterViewModel() {
我正在使用原始 SQL 插入一行,并且需要获取新插入行的主键。我不能假设任何非 PK 插入数据都是唯一的,也不能假设该行是最后插入的行。 如果无法使用原始 SQL,那么使用“常规”插入怎么样?我在想我
我正在尝试在/res 目录中创建一个新文件夹 我添加了一个新目录 该文件夹不会出现在/res 文件夹中,即使它存在于 finder 中 案例和要点我尝试再次添加该文件夹并收到一条消息,告诉我它存在。
我想创建一个数据库并在该数据库中创建一个表。。我创建了一个新数据库,然后创建了一个新表“USERS”。但会出现错误“关系已存在”。是的,我已经有一个表“USERS”,但它存在于另一个数据库中。但我希望
我想创建一个数据库并在该数据库中创建一个表。。我创建了一个新的数据库,然后创建了一个新的表“users”。但出现错误“关系已存在”。是的,我已经有一个表“users”,但它存在于另一个数据库中。但是我
我想创建一个如下所示的 Coq 策略。我断言一个名为 H 的命题,我证明该命题,然后我在该命题内使用 simpl。该策略看起来像这样: Tactic Notation "foo" := asser
我想知道这是怎么回事。我有两个功能,当一个接一个地调用时,它们都运行良好: function createTable() { var slidesPage = SlidesApp.openById
如何获取新保存文件的文件名? 通常,我可以使用以下方法获取文件名: Office.context.document.url 然而,当用户打开一个新的工作簿时,它并没有真正的文件名,而且奇怪的是,即使他
我有一个 Webix,它可以添加应验证的附加文本字段以及预定义字段。 类似下一个:http://webix.com/snippet/73c90f29 function addFormInput(){
我是一名优秀的程序员,十分优秀!