第31話 メソッドの修正★
////////////////////////////////////////////
class Shot{
// 要素の定義
count // カウンター
time // 射出時間
interval // 射出間隔
angle // 射出角度
position //射出位置
size // 大きさ
power // 威力
attribute // 属性
sub_attribute // 副属性
speed // 速度
acceleration // 加速度
bullets
・・・
//
set(){
// 弾の初期化処理
time = 1200 // 射出時間
interval = 60 // 射出間隔
angle = 360 / 10 * count / 60 // 射出角度
position = device.position //射出位置
size = 0.5 // 大きさ
power = 0.1 // 威力
if(count % 120 == 0){
attribute = ICE // 属性=氷
}
else{
attribute = WIND // 属性=風
}
speed = 0.1 // 速度
acceleration = 0 // 加速度
}
// ★以下が新たに解明された処理
create_bullets(){
// 弾の生成処理
if(count < time && count % interval == 0){
// カウンターが射出時間(time)より小さい かつ
// カウンターが射出間隔(interval)に達した 場合
set_bullets() // ↓の弾の設定処理を呼び出す
}
}
set_bullets(){
// 弾の設定処理
bullet = new Bullet() // 新しい弾を生成
bullet.angle = angle // 射出角度
bullet.position = position //射出位置
bullet.size = size // 大きさ
bullet.power = power // 威力
bullet.attribute = attribute // 属性
bullet.sub_attribute = sub_attribute // 副属性
bullet.speed = speed // 速度
bullet.acceleration = acceleration // 加速度
bullets.add(bullet) // 新しい弾を追加する
}
・・・
}
////////////////////////////////////////////
新たに見えてきた処理は
①弾の生成処理(create_bullets())
②弾の設定処理(set_bullets())
の二つだ。
どうやら
①弾の生成処理(create_bullets())は
射出時間(time)と射出間隔(interval)の確認を行い、
条件が揃えば、弾の設定処理(set_bullets())を呼び出すという処理のようだ。
②弾の設定処理(set_bullets())はひたすら弾の初期値を設定している処理のようだ。
この②弾の設定処理をすると、ユキは、まだ解析はできていない範囲であるが、更に上位の処理により、弾の発射処理などが行われると推測できた。
ということで、まずは、②弾の設定処理(set_bullets())を制御していると思われる①弾の生成処理(create_bullets())について、より深く解析することにする。
////////////////////////////////////////////
if(count < time && count % interval == 0){
// カウンターが射出時間(time)より小さい かつ
// カウンターが射出間隔(interval)に達した 場合
////////////////////////////////////////////
この条件について解析する。
ここで初めて出てくるのが〝&&〟という記号だ。
この記号は日本語で言うと〝かつ〟を表す。
////////////////////////////////////////////
if(条件A && 条件B)
////////////////////////////////////////////
のように使用し、AとBの両方の条件を満たした時のみ、
条件内の処理を実施するという意味となる。
今回の条件でいうと
条件A ⇒ count < time // カウンターが射出時間(time)より小さい
条件B ⇒ count % interval == 0 // カウンターが射出間隔(interval)に達した
ということになる。
射出時間(time)と射出間隔(interval)の具体的な値は弾の初期化処理(set())の中で定義している。
////////////////////////////////////////////
set(){
// 弾の初期化処理
time = 1200 // 射出時間
interval = 60 // 射出間隔
////////////////////////////////////////////
したがって、具体的な数値で表すと
条件A:count < 1200 // カウンターが射出時間(1200)より小さい
条件B:count % 60 == 0 // カウンターが射出間隔(60)に達した
ということになる。
この世界では、1秒が120カウントであることから、
1200とは約10秒、60とは約0.5秒のことである。
つまるところ、
////////////////////////////////////////////
if(count < time && count % interval == 0){
set_bullets() // ↓の弾の設定処理を呼び出す
}
////////////////////////////////////////////
が意味するのは
カウンターが10秒まで かつ 0.5秒ごとに
②弾の設定処理(set_bullets())
を呼び出すという意味になる。
(……ということは、ちょっと無理やりだけど、この①弾の生成処理(create_bullets())の中身をいじれば、目的としていた〝弾の同時発射〟も可能かもしれない……!)
ユキは①弾の生成処理(create_bullets())の改修に取り掛かる。
////////////////////////////////////////////
【変更前】
create_bullets(){
// 弾の生成処理
if(count < time && count % interval == 0){
// カウンターが射出時間(time)より小さい かつ
// カウンターが射出間隔(interval)に達した 場合
set_bullets() // ↓の弾の設定処理を呼び出す
}
}
↓↓↓
【変更後】
create_bullets(){
// 弾の生成処理
if(count < time && count % interval == 0){
// カウンターが射出時間(time)より小さい かつ
// カウンターが射出間隔(interval)に達した 場合
set_bullets() // ↓の弾の設定処理を呼び出す
// 以下に処理を追加
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
}
}
////////////////////////////////////////////
〝THEごり押し〟であるが、ユキはこのように
元々の処理が弾の呼び出し処理が一つしかないから、たくさん呼び出せばいいじゃないかという単純な発想である。
今回は3つ弾の追加処理を追加し、合計4つの弾が同時に出るように変更した。
直前に90°ずつ角度を加算してやれば、ちょうど直角分ずつ弾の角度がずれるようになる。
(かなりごり押したけど、果たしてうまくいくか……)
微調整として、弾の数を4倍にしたため、大きさ(size)は0.5⇒0.125へ変更した。
全体の
////////////////////////////////////////////
class Shot{
// 要素の定義
count // カウンター
time // 射出時間
interval // 射出間隔
angle // 射出角度
position //射出位置
size // 大きさ
power // 威力
attribute // 属性
sub_attribute // 副属性
speed // 速度
acceleration // 加速度
bullets
・・・
//
set(){
// 弾の初期化処理
time = 1200 // 射出時間
interval = 60 // 射出間隔
angle = 360 / 10 * count / 60 // 射出角度
position = device.position //射出位置
size = 0.125 // 大きさ
power = 0.1 // 威力
if(count % 120 == 0){
attribute = ICE // 属性=氷
}
else{
attribute = WIND // 属性=風
}
speed = 0.1 // 速度
acceleration = 0 // 加速度
}
create_bullets(){
// 弾の生成処理
if(count < time && count % interval == 0){
// カウンターが射出時間(time)より小さい かつ
// カウンターが射出間隔(interval)に達した 場合
set_bullets() // ↓の弾の設定処理を呼び出す
// 以下に処理を追加
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
set_bullets() // ↓の弾の設定処理を呼び出す
angle += 360 / 4 // 角度を90°足す
}
}
set_bullets(){
// 弾の設定処理
bullet = new Bullet() // 新しい弾を生成
bullet.angle = angle // 射出角度
bullet.position = position //射出位置
bullet.size = size // 大きさ
bullet.power = power // 威力
bullet.attribute = attribute // 属性
bullet.sub_attribute = sub_attribute // 副属性
bullet.speed = speed // 速度
bullet.acceleration = acceleration // 加速度
bullets.add(bullet) // 新しい弾を追加する
}
・・・
}
////////////////////////////////////////////
ユキは恐る恐る試してみる。
「おぉーー!」
ユキは思わず、一人歓声をあげる。
魔法補助具……改め、魔法具は、ほぼほぼ期待通りの動きをしてくれた。
4つの弾が十字のように、四方向に発射され、
それが0.5秒刻みで、少しずつ角度を変えながら回転することで
(お? しかも、なんかひんやり感が増している気がする……!? ちゃんとした検証が必要だけど……)
大きさ(size)を1/4にして、出力調整したにも関わらず、体感でも、冷感が増している感じがした。
〝見栄え〟がよくなったことによる成果であった。
と……
ユキは急に睡魔に襲われる。
(……流石にちょっと頑張りすぎたかな……でもまぁ、明日、休日でよかっ…………た…………)
寝落ちした。
=======
【あとがき】
ここまでお読みいただき有難うございます。
ちょっと難しくなってきたでしょうか(大丈夫でしょうか。。。)
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます