Lesson06 サカナにエサを与える 解説
001:<HTML>
002:<HEAD>
003:<TITLE>Lesson06</TITLE>
004:</HEAD>
005:<BODY BGCOLOR="#0080F0">
006:<IMG SRC="img/goldfish.gif" ID = "fish1" " Style = "Position:Absolute;Left:100;Top:200"> <!--画像登録:サカナ-->
007:<IMG SRC="img/worma.gif" ID = "worm1" " Style = "Position:Absolute;Left:-25;Top:0"> <!--画像登録:エサ -->
008:<SCRIPT LANGUAGE="VBScript">
009:<!--
010:Dim ww, wh '変数宣言 ww:ウインドウ幅 wh:ウインドウ高さ
011:Dim tminterval '変数宣言 tminterval:タイマーの時間設定
012:Dim xfish, yfish '変数宣言 サカナの移動量 xfish:水平方向移動量 yfish:垂直方向移動量
013:Dim tworm '変数宣言 tworm:エサの反転制御用カウンタ
014:Dim blnfeed '変数宣言 blnfeed:エサの有無識別 有:blnfeed=True 無:blnfeed=False
015:Sub Window_OnLoad() 'ウインドウが開くとコールされる Lesson01解説 Window_OnLoad 参照
016: xfish = 4: yfish = 1 '変数の初期値設定
017: blnfeed = False '変数の初期値設定
018: tminterval = 20 '変数の初期値設定
019: tm() 'サブプロシジャー Sub tm() をコール
020:End Sub
021:Sub Document_OnClick 'マウスで画面をクリックするとコールされるプロシジャー
022:Dim x, y '変数宣言 エサの位置
023: If blnfeed = False Then 'エサがない場合
024: blnfeed = True '変数blnfeedをエサ有りに設定
025: x = Window.Event.X - Worm1.Width / 2 'Window.Event.X:マウス水平方向クリック位置 Worm1.Width:エサの幅
026: y = Window.Event.Y - Worm1.Height / 2 'Window.Event.Y:マウス垂直方向クリック位置 Worm1.Height:エサの高さ
027: worm1.Style.PixelLeft = x 'クリックした位置にエサを移動(水平方向)
028: worm1.Style.PixelTop = y 'クリックした位置にエサを移動(垂直方向)
029: Else 'マウスをクリックしたとき既にエサが有った場合
030: blnfeed = False '変数blnfeedをエサ無しに設定
031: worm1.Style.PixelLeft = -100 'エサを画面から隠す
032: If fish1.Style.PixelTop < wh / 2 Then 'サカナの深さ方向の動きを中央方向に向かわせる
033: yfish = 1
034: Else
035: yfish = -1
036: End If
037: End If
038:End Sub
039:Sub worm() 'エサの画像を周期的に取り替えてエサの跳ね返り動作を作るプロシジャー
040: tworm = (tworm + 1) Mod 20 '変数tworm:0から19までの数値を繰り返す Mod:リファレンスのMod参照
041: If tworm = 0 Then
042: worm1.SRC = "img/worma.gif" 'wom1の画像をworma.gifにする
043: ElseIf tworm = 10 Then
044: worm1.SRC = "img/wormb.gif" 'wom1の画像をwormb.gifにする
045: End If
046:End Sub
047:Sub eat() 'エサありの場合にコールされサカナの動きを制御するプロシジャー
048:Dim x, y '変数宣言 サカナの口からエサまでの距離
049:Dim fl, ft '変数宣言 サカナの位置
050:Dim wl, wt '変数宣言 エサの位置
051: fl = fish1.Style.PixelLeft
052: ft = fish1.Style.PixelTop + fish1.Height / 2
053: wl = worm1.Style.PixelLeft + Worm1.Width / 2
054: wt = worm1.Style.PixelTop + Worm1.Height / 2
055: x = wl - fl
056: y = wt - ft - 13
057: If xfish > 0 Then 'サカナが右方に動いているとき、xの値をサカナの幅分補正
058: x = x - fish1.Width
059: End If
060: If y > 4 then 'サカナの高さ方向位置をエサの方向に向かわせる
061: yfish = 4
062: ElseIf y < -4 Then
063: yfish = -4
064: Else 'サカナとエサの高さ方向位置がほぼ一致
065: yfish = 0
066: End If
067: If xfish > 0 And x < -fish1.Width Then 'サカナの水平方向位置をエサの方向に向かわせる
068: xfish = xfish * (-1)
069: fish1.Style.Filter = "Fliph" 'リファレンス Filter 参照
070: ElseIf xfish < 0 And x > fish1.Width Then
071: xfish = xfish * (-1)
072: fish1.Style.Filter = "" 'リファレンス Filter 参照
073: End If
074: fish1.Style.PixelLeft = fish1.Style.PixelLeft + xfish
075: fish1.Style.PixelTop = fish1.Style.PixelTop + yfish
076: If Abs(x) < 5 And Abs(y) < 5 Then 'サカナの口がエサの位置に近づいた
077: worm1.Style.PixelLeft = -100 'エサを画面から隠す
078: blnfeed=False '変数blnfeedをエサ無しに設定
079: End If
080:End Sub
081:Sub swimfish() 'エサ無しの場合にサカナの動きを制御するプロシジャー
082: If fish1.Style.PixelLeft > ww - fish1.Width Then
083: xfish = -4
084: fish1.Style.Filter = "Fliph" 'リファレンス Filter 参照
085: ElseIf fish1.Style.PixelLeft < 0 Then
086: xfish = 4
087: fish1.Style.Filter = "" 'リファレンス Filter 参照
088: End If
089: If fish1.Style.PixelTop > wh - fish1.Height Then
090: yfish = -1
091: ElseIf fish1.Style.PixelTop < 0 Then
092: yfish = 1
093: End If
094: fish1.Style.PixelLeft = fish1.Style.PixelLeft + xfish
095: fish1.Style.PixelTop = fish1.Style.PixelTop + yfish
096:End Sub
097:Sub tm() 'SetTimeOutによりtmintevalの時間間隔毎に作動するプロシジャー
098: ww = Document.Body.OffsetWidth 'ww:ウインドウの幅を取得
099: wh = Document.Body.OffsetHeight 'wh:ウインドウの高さを取得
100: If blnfeed = False Then 'エサ無しの場合 subプロシジャーSub swimfish()をコール
101: swimfish
102: Else 'エサ有りの場合 subプロシジャー Sub worm() および Sub eat()をコール
103: worm
104: eat
105: End If
106: SetTimeOut "tm", tminterval 'Lesson01解説 SetTimeOut 参照
107:End Sub
108:-->
109:</SCRIPT>
110:<!--Copyright(c) 2002 Animation studio nezus QQQ All rights reserved.-->
111:</BODY>
112:</HTML>
Lesson06 解説 終わり