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

n-wayショット

n-way弾(扇状に複数個発射される弾)発射のサンプルです。

好みの方向に弾を発射し動かすことができれば、難しいことは何もありません。

などが理解できれば問題はないでしょう。

ここでは扇状に発射するにあたり、同時発射する弾のうち、何番目の弾かによって 発射角度を一定値だけずらしています。

サンプルスクリプト

画面をクリックするとその方向にn-way弾を発射します。

filen-way.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
 76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* HSP開発Wiki n-wayショット sample code */
#const BULLET_MAX   60      // 弾数最大数
#const BULLET_SPEED 10      // 弾速
#const BULLET_DIST  0.2     // 発射時の間隔[rad]
#const SHIP_RADIUS  5       // 自機半径
#const N_WAY        5       // 何発同時に発射するか
#const WAIT_TIME    4       // ウェイト[ms]
 
    dim  bullet,   BULLET_MAX
    ddim bulletX,  BULLET_MAX
    ddim bulletY,  BULLET_MAX
    ddim bulletVX, BULLET_MAX
    ddim bulletVY, BULLET_MAX
 
    shipX = double(ginfo_winx / 2)
    shipY = double(ginfo_winy) - SHIP_RADIUS
    PI = atan(1) * 4
 
    onclick gosub *makeBullet
 
*main
    gosub *bulletMove
    gosub *draw
    wait WAIT_TIME
    goto *main
 
*bulletMove
    repeat BULLET_MAX
        if bullet(cnt) == 0 : continue
        bulletX(cnt) += bulletVX(cnt)
        bulletY(cnt) += bulletVY(cnt)
        if (bulletX(cnt) < 0)|(ginfo_winx < bulletX(cnt))|(bulletY(cnt) < 0)|(ginfo_winy < bulletY(cnt)) : bullet(cnt) = 0
    loop
    return
 
*draw
    redraw 0
    color 255, 255, 255 : boxf
    gosub *drawBullet
    gosub *drawShip
    redraw 1
    return
 
*drawBullet
    color
    repeat BULLET_MAX
        if bullet(cnt) == 0 : continue
        pset bulletX(cnt), bulletY(cnt)
    loop
    return
 
*drawShip
    color 255
    circle shipX - SHIP_RADIUS, shipY - SHIP_RADIUS, shipX + SHIP_RADIUS, shipY + SHIP_RADIUS
    return
 
*makeBullet
    tmp = 0
    repeat N_WAY
        up_cnt = cnt
        repeat BULLET_MAX - tmp, tmp
            if bullet(cnt) : continue
            bullet(cnt) = 1
            bulletX(cnt) = shipX
            bulletY(cnt) = shipY
 
            radian = atan(-mousey + shipY, mousex - shipX) - (0.5 * (N_WAY - 1) - up_cnt) * BULLET_DIST
            bulletVX(cnt) =  cos(radian) * BULLET_SPEED
            bulletVY(cnt) = -sin(radian) * BULLET_SPEED
            tmp = cnt + 1
            break
        loop
        if BULLET_MAX < tmp : break     // 無限ループ回避
    loop
    return
添付ファイル:
filen-way.hsp
570件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-10 (火) 09:32:18 (2434d)