【iPhoneゲーム開発6】銃を撃つアクションを追加してみた

こんにちは、のっくんです。

SwiftのiPhoneゲーム開発も少しずつ慣れてきた感があります。

今回はプレイヤーが銃を撃てるようにしてみました。

反対向きにも対応しています。

ジャンプ後のスクショなので、弾が空中からも飛んでいます。

見えるようにあえて弾の速度を遅くしています。

弾のクラスを作る

銃を撃つアクションを追加するのに、まず考えたのは弾をどうやって実装するのか。

今までは、プレイヤーや地面のクラスを作って、ゲームシーンに追加してきました。

弾はプレイヤーから発砲されるものなのでプレイヤーのサブクラスとして実装するのもアリかと思いました。

しかし、プレイヤーのクラスの1部として実装すると、ゲームシーンに追加できなくなってしまいます。

弾をゲームシーンに追加しないと画面に追加されないため、やはり弾は1クラスとして実装することにしました。

弾の向きを変更する

弾は左向き、右向きがあります。

テキスチャの向きを変更するには、xScaleを変更します。

xScale = -1にするとx方向に反転します。

弾に重力は適用しない

重力を適用すると、発射後、途中で沈んでしまいます。

affectedByGravityで重力影響を受けないようにします。

数秒後に弾を消す

発射後に弾は画面から消えますが、スプライトノードとしては存在しています。

数秒待った後に消す処理を入れました。

コード

イニシャライザ

Shotクラスのinit処理を作ります。

イニシャライザにプレイヤーの位置、向きを設定します。

プレイヤーの位置や向きによって弾のポジションや向きが決定します。

弾を飛ばすための処理

弾を飛ばすにはapplyImpulseを使います。

時間のインターバルを設ける

クラスを作ったところで、次はゲームシーンの中で呼び出します。

GameScene.swiftのGameSceneクラスに以下の変数を追加します。

次に、GameScene.swiftのupdate関数に以下を追加します。

プレイヤーが発砲中のフラグが立っているか確認し、その後インターバルが空いているか確認しています。

インターバルが短ければ短いほど高速に弾を連射できます。

【iPhoneゲーム開発7】SpriteKit Sceneを使って敵キャラを配置してみた