API (Application Program Interface) VB6
 画像のコピー V 前へ 目次へ 次へ 

  スプライト画像の移動

 せっかく背景を透過して表示させることができたので、移動させてみる。UFOをウィンドウの左から右方向へ移動させる。一度移動すると終わりである。

 タイマー1つ(Timer1)を追加する。Timer1のIntervalプロパティを200に設定する。

・プログラムリスト

Option Explicit
Dim UFOX As Long, UFOY As Long    '←追加

Private Sub UFOidou()    '←変更(Form_Click→UFOidou)
    Dim x As Long, y As Long, w As Long, h As Long
    Dim dmy As Long

    x = 10      'コピー先の座標
    y = 10
    w = Picture2.Width      'コピー元のサイズ
    h = Picture2.Height
    'Form1とマスク画像(picture3)をORで合成
    dmy = BitBlt(Form1.hdc, UFOX, UFOY, w, h, Picture3.hdc, 0, 0, SRCPAINT)
    'Form1と元画像(picture2)をANDで合成
    dmy = BitBlt(Form1.hdc, UFOX, UFOY, w, h, Picture2.hdc, 0, 0, SRCAND)
    Form1.Refresh
End Sub

Private Sub Form_Load()
    Dim dmy As Long

    Form1.Show
    'Picture1のサイズをフォームに合わせる。
    Picture1.Width = Form1.ScaleWidth
    Picture1.Height = Form1.ScaleHeight
    'Formの画像を退避
    dmy = BitBlt(Picture1.hdc, 0, 0, Form1.ScaleWidth, Form1.ScaleHeight, _
Form1.hdc, 0, 0, SRCCOPY)
    'UFO座標初期化
    UFOX = 10    '←追加
    UFOY = 10    '←追加
End Sub

Private Sub Timer1_Timer()    '←プロシージャ追加
    Dim dmy As Long

    'Formの画像を初期化
    dmy = BitBlt(Form1.hdc, 0, 0, Form1.ScaleWidth, Form1.ScaleHeight, _
Picture1.hdc, 0, 0, SRCCOPY)
    UFOX = UFOX + 10   'UFOのx座標加算(移動)
    UFOidou
End Sub

 実行するとスプライト処理された画像が移動する。

 

 API関数とメソッドの速度差

 ちなみに、BitBlt関数でUFOIdouサブプロシージャをプログラムした今回の例とPaintPictureメソッドでプログラムした例「§4 画像の利用」との速度差を調べてみる。

 結果は次のようになった。 (PV 733MHz)
   API関数(UFOIdouを10000回繰り返す。) … 約0.4秒
   メソッド(UFOIdouを100回繰り返す。)  … 約8.1秒

 タイマー(Timer1)のEnableプロパティをFalseに設定して動作を止める。
 コマンドボタン(Command1)を1つ配置する。
 プログラムは次の通りである。

Private Sub Command1_Click()
    Dim s As Double, a As Double, n As Integer
    s = Timer
    For n = 1 To 100  '#1
        UFOIdou
    Next n
    a = Timer - s
    Print a
End Sub

#1 API版はFor n=1 To 10000として10000回繰り返す。メソッド版はFor n= 1 To 100として100回繰り返す。メソッド版の繰り返しを余り大きくすると終了までに時間がかかるので注意が必要である。100回で8秒と言うことは、単純に1000回で80秒(1分20秒)、10000回で800秒(13分20秒)となる。


 画像のコピー V 前へ 目次へ 次へ 
Copyright © 2002 Hiroshi Masuda 

 

 

inserted by FC2 system