前提・実現したいこと
シューティングゲームとして
敵の攻撃をプレイヤーに衝突するように移動させることはできたのですが、
避けた場合にその位置に弾がとまってしまい画面外まで移動してくれません。
また弾速度も位置によって遅くなってしまいます。
画面外まで同一角度の直線上に画面外まで移動・同一速度で移動できる方法の
アドバイスいただけると助かります。
該当のソースコード
import SpriteKit class GameScene: SKScene, SKPhysicsContactDelegate { var player = SKShapeNode() var timer = Timer() override func didMove(to view: SKView) { プレイヤー() タイマー() } func プレイヤー(){ let player = SKShapeNode(rectOf: CGSize(width: 50, height: 50)) player.fillColor = .blue player.position = CGPoint(x: size.width*0.3, y: size.height*0.5) addChild(player) self.player = player } @objc func 弾(){ let enemeyshotA = SKShapeNode(circleOfRadius: 10) enemeyshotA.fillColor = .green enemeyshotA.position = CGPoint(x: size.width*0.8, y: size.height*0.5) addChild(enemeyshotA) let action = SKAction.move(to: CGPoint(x: player.position.x, y: player.position.y), duration: 2) enemeyshotA.run(action) } func タイマー(){ timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(GameScene.弾), userInfo: nil, repeats: true) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch:AnyObject = touches.first{ let location = touch.location(in: self) let action = SKAction.move(to: CGPoint(x: location.x, y: location.y + 60), duration: 0.2) player.run(action) } } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch:AnyObject = touches.first{ let location = touch.location(in: self) let action = SKAction.move(to: CGPoint(x: location.x, y: location.y + 60), duration: 0.2) player.run(action) } } }
試したこと
距離を強引に伸ばそうとx軸に数値を追加してしまうと(player.position.x -600など)
プレイヤーがyに移動すると当たらないなどとなってしまいます。
2021/1/13追記
以下の部分を少し変更したところ弾を回避の動作後も弾が残り続け直線方向にいくことができました。
*6と記載している部分に発射元と自機の距離により任意の数値(近い場合は大きい数値遠い場合は小さい数値)を代入できれば発射速度も同一で対応出来そうなのですが、どのように対応していいかわかりません。
また別の方法などが良い等アドバイス等引き続きご指導いただけると助かります。
let action = SKAction.move(to: CGPoint(x: player.position.x + (player.position.x - size.width*0.8)*6, y: player.position.y + (player.position.y - size.height*0.5)*6), duration: 6)
回答1件
あなたの回答
tips
プレビュー