hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
標的のほうを向く砲身 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

標的のほうを向く砲身

シューティングでよくある「砲台型の敵」の、方針の角度の計算方法のサンプルコードです。
単純にアークタンジェント(atan)を用いて角度を計算するだけですが、速度上限の設定など工夫できる点は多々あるでしょう。

サンプルコード

filebarrel.hsp
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
-
|
-
|
|
!
 
 
 
 
 
 
 
 
 
/* HSP開発Wiki 標的のほうを向く砲身 sample code */
#module
#deffunc plot int x, int y, int radius
    // (x, y)を中心とした半径radiusの円を描く 
    circle x - radius, y - radius, x + radius, y + radius, 0
return
#global
 
#const BULLET_RADIUS  4       // 砲弾の半径
#const BULLET_SPEED   5       // 砲弾の速さ
#const CANNON_RADIUS  10      // 砲台の半径
#const CANNON_LENGTH  20      // 砲身の長さ
 
    cannonX  = 300            // 砲台の位置
    cannonY  = 200
    cannonT  = 0.0            // 砲身の角度
    bulletX = 0.0             // 砲弾の位置
    bulletY = 0.0
 
    title "クリックで砲撃 / 右クリックで砲台移動"
    onclick gosub *clicked
 
*mainLoop
    gosub *calc
    gosub *draw
    await 6
    goto *mainLoop
 
*calc
    // 砲身の角度を計算
    // ここを改造すればゆっくり動く砲身を作れます
    cannonT = atan(mousey - cannonY, mousex - cannonX)
 
    // 砲弾の移動
    if bullet {
        bulletX += bulletVX
        bulletY += bulletVY
        if (bulletX < 0)|(bulletY < 0)|(ginfo_winx < bulletX)|(ginfo_winy < bulletY) : bullet = 0
    }
    return
 
*draw
    redraw 0
    color 255, 255, 255 : boxf
 
    // 砲台
    color
    plot cannonX, cannonY, CANNON_RADIUS
    line cannonX + cos(cannonT)*CANNON_LENGTH, cannonY + sin(cannonT)*CANNON_LENGTH, cannonX, cannonY
 
    // 砲弾
    if bullet {
        color 0, 0, 255
        plot bulletX, bulletY, BULLET_RADIUS
    }
 
    redraw 1
    return
 
*clicked
    if iparam == 0 {
        gosub *shotcannon
    } else {
        cannonX = mousex
        cannonY = mousey
    }
    return
 
*shotcannon
    bullet = 1
    bulletX  = cos(cannonT)*CANNON_LENGTH + cannonX
    bulletY  = sin(cannonT)*CANNON_LENGTH + cannonY
    bulletVX = cos(cannonT)*BULLET_SPEED
    bulletVY = sin(cannonT)*BULLET_SPEED
    return

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filebarrel.hsp
458件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 15:34:35 (2436d)