FreeBASIC マニュアルのトップに戻る

FreeBASIC Pcopy

目次→描画ライブラリー参考→描画画面関連PCOPY←オリジナル・サイト

PCOPY 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

描画ページやテキスト・ページを、別のページにコピーします。

構文:
declare function Pcopy ( byval source as long = -1, byval destination as long = -1 ) as long

用法:
Pcopy [ source ] [, destination ]

パラメタ:
source
コピー元のページ
destination
コピー先のページ(行き先)

戻り値:
成功した場合は (0) を、失敗した場合はゼロ以外のエラーコードを返します。

記述:
描画ページかテキスト・ページを、別のページにコピーします。
さまざまな描画を、目に見えないページにまず描いて、それを、アクティブな目に見えるページにコピーすることで、滑らかな描画やアニメーションを作成するのに、役に立ちます。
二重バッファリング(double buffering) とか、ページ切替え(page flipping)という言いかたで、知られています。

sourcedestination は、ページ番号で指定します。
pcopy が呼ばれるとき、'source'ページは、'destination(行き先)'ページの上に、コピーされます。

source 引数を省略すると、現在の作業ページが対象になります。
destination ページを省略すると、現在の目に見えるページにコピーされます。

destination (目的)ページがロックされると、Pcopy は動作しません。

Pcopy によって返されたエラーコードは、次の行の Err を使って確認できます。
関数バージョンの Pcopy は、エラーコードを32ビット Long として直接返します。

例:

注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

'8ビット色の、320 ×200 の描画画面を、2 画面セットアップします
ScreenRes 320, 200, 8, 2

'作業ページ 1 と、表示ページ 0 を用意します
ScreenSet 1, 0

'画面の上部を横切って移動する円を描きます
For x As Integer = 50 To 269
    Cls                    '新たに開始できるように、画面を消去します
    Circle (x, 50), 50, 14 '1 ページ目に、50 ピクセルの半径の黄色の円を描きます
    PCopy 1, 0             '描いた画像をページ1 からページ0 にコピーします
    Sleep 25               '25 ミリ秒、待ちます
Next x

'描画結果を確認できるように、何かキーが押されるまで、画面を閉じるのを待ちます
Sleep



'' -lang fblite または qb でコンパイルする

#lang "fblite"

'' 実行画面モードの例:

'' 作業ページ番号に 0 を、目に見えるページ番号に 1 をセットします
#if __FB_LANG__ = "QB"
Screen ,, 0, 1
#else
Screen , 0, 1
#endif

Dim As Integer i, frames, fps
Dim As Double t

t = Timer

Do
    '' 作業ページを、色と文字で満たします
    Cls
    Locate 1, 1
    Color (i And 15), 0
    Print String$(80 * 25, Hex$(i, 1));
    i += 1

    '' 1 秒毎に、フレームを見せます
    Color 15, 0
    Locate 1, 1
    Print "fps: " & fps,
    If Int(t) <> Int(Timer) Then
        t = Timer
        fps = frames
        frames = 0
    End If
    frames += 1

    '' 作業ページから、目に見えるページにコピーします
    PCopy

    '' cpu 時間を解放するために、フレーム毎に、50ms 休みます
    Sleep 50, 1

    '' ユーザが何かキーを押すまで、繰り返します
Loop Until Len(Inkey$)


プラットホーム差:

QBからの違い:

参考:
描画画面関連に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2023-07-09 00:55:20
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承