改めましてお勉強

しめさば
記事: 0
登録日時: 11年前

改めましてお勉強

投稿記事 by しめさば » 11年前

ありがたい事に昨日の日記にコメントを頂き、環境は(参考書籍を除き)揃った!

独り言を添えつつ、お勉強の成果らしきものを日記化しようかなぁと思う次第。
あまり書くと荒らし的になってしまうかもしれないので、この日記のコメントという形で書いていった方がいいのかしら?
3日坊主にならないようにのんびり少しずつやっていこう。

新・ゲームプログラミングの館
http://dixq.net/g/
プロジェクトをDLして、1.1から改めて学習。

CODE:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        DxLib_Init();   // DXライブラリ初期化処理
        WaitKey();      // キー入力待ち
        DxLib_End();    // DXライブラリ終了処理
        return 0;
}
ふむふむ。
DxLib.hというヘッダーファイルをincludeするのね。
恐らく同一ディレクトリのDxLibフォルダの内容をincludeしてるんだね。
出ましたWINAPI WinMain ん~、積み本のひとつ「14歳からはじめるC言語」で呪文として扱われたアレだな。
それにしてもあの本、14歳でスンナリ行けるんだろうか・・・。
積んだ事によって、余計な劣等感を抱いてしまったんだが・・・。
この際なので検索してみると
http://news.mynavi.jp/articles/2009/05/25/windowsapi/
というページが出てきた。
WINPAPIの意味はわからないが、とにかくWinMainというのは、「Windowsアプリケーションのエントリーポイント」らしい。
と、とにかくint Main(void){}みたいなモノで、Main関数のWindowsのモノなのでWinMainなんだな。きっと。多分・・・。

4行目を検索してみると
http://easyshotemup.web.fc2.com/dxlib/01.html
なるページが。
へぇ~。本当は沢山の数値を初期化をしなければならない所を DxLib_Init();だけで済ましてしまうんだ。
こりゃスゴイ。(中身のコードの意味はサッパリであるが・・・)

5行目が
WaitKey();
これはWaitっていうくらいだから、キー入力を待つためのコマンドなんだろう。
これが無いと、ウィンドウがパッと出て消えるんだろう。きっと・・・。

6行目が
DxLib_End();
DXライブラリ終了処理を行っているんだな。ってコメント文に書いてあるがな!っていうね。
http://dixq.net/forum/viewtopic.php?f=3&t=5291
というコチラのフォーラムが出てきたけど、ワカラナイw
当たり前ながら、プログラム出来る人ってスゴイなぁ。

で最後に0を返すと。

よし、デバッグ無しで開始・・・エラー・・・だと・・・!?

悔しいので、1.2章に進んでみると。
ChangeWindowMode(TRUE); // ウィンドウモードに設定
が追記されていたので、これを追加して実行・・・。ほっ(安堵)
一応リファレンスをぺたりんこ
http://homepage2.nifty.com/natupaji/DxL ... html#R11N1

うむー前途多難だな。こりゃ。
思いの他時間がかかってしまった・・・・。今日はここまで。
最後に編集したユーザー しめさば on 2013年11月23日(土) 00:50 [ 編集 1 回目 ]

ISLe
記事: 2650
登録日時: 15年前

Re: 改めましてお勉強

投稿記事 by ISLe » 11年前

仮にウィンドウズが異なるアーキテクチャに移植された場合、そのウィンドウズ用の開発環境でAPIENTRYの中身が変わる可能性があります。
いまのウィンドウズでAPIENTRYとWINAPIが同じだからといってAPIENTRYの代わりにWINAPIを使ったらソースレベルでの移植性は失われます。
APIENTRYとかWINAPIも抽象化された表現なので中身が同じだから意味も同じということにはならないと思います。
へにっくすさんの書かれたとおり、エントリーポイント(の呼び出し規約)を示すキーワードとしてAPIENTRYがあると考えるべきではないでしょうか。

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

>softya(ソフト屋)様

 コメントありがとうございます!

 抽象化された概念としての「ハンドル」なんですね。
 巨視的な視点で見れるよう、勉強頑張ります。


>へにっくす様

>usao様

>ISLe様

 コメントありがとうございます!
 「言葉の意味はよくわからんがとにかく(略)」といった感想が正直なところですが、分かるようになれるよう頑張りたいと思います。
 それにしても、ここは活発で良い所ですね。

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

 ふひぃ。ちょっと本業が疲れた一日で御座いました。
 ひとつくらいは進めよう・・・。

1.5章

CODE:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode( TRUE ); // ウィンドウモードに設定
        DxLib_Init();   // DXライブラリ初期化処理

        int Handle;
        Handle = LoadGraph( "画像/キャラクタ00.png" );
        DrawGraph( 50, 100, Handle, TRUE );

        while( 1 ){
                ProcessMessage();
                if( CheckHitKey(KEY_INPUT_ESCAPE) == 1 ){
                        break;
                }
        }
        
        DxLib_End() ;   // DXライブラリ終了処理
        return 0 ;
} 
 新しい関数はCheckHitKey。リファレンスは
http://homepage2.nifty.com/natupaji/DxL ... .html#R5N2
 while(1)は無限ループなのは分かるけど、条件式じゃない事に違和感。
検索すると同じ感覚だった方がいたらしいw
http://detail.chiebukuro.yahoo.co.jp/qa ... q105920205
 なぁるほど。じゃあ2でも3でも良いのかな?

 あとProcessMessageリファレンスは
http://homepage2.nifty.com/natupaji/DxL ... .html#R1N3
 兎に角1ループに一回この関数を呼び出すと吉。らしい。
 だからwhile分の中にあるんだネ。

 ちなみにwhile(33333333333)で回してみても同じ結果だった。へ~。

アバター
usao
記事: 1889
登録日時: 12年前

Re: 改めましてお勉強

投稿記事 by usao » 11年前

オフトピック
単に個人的興味で尋ねるのですが,そのコードで出たウィンドウ内の画像は
正しく再描画されるのかどうか教えていただけるとうれしいです.
(例えば,一度他のウィンドウに隠されたりした後でも画像はちゃんと表示され続けるのか,等)

以前
http://dixq.net/forum/blog.php?u=1166&b=3950
のような話があって,描画処理(ここではDrawGraph()かな?)の結果が
現在表示内容として保持され続ける保証が無い(=間髪入れずにひたすら描画し続ける必要がある?)
みたいな(不思議な)話だったので,ちょっと気になっています.

ISLe
記事: 2650
登録日時: 15年前

Re: 改めましてお勉強

投稿記事 by ISLe » 11年前

>usaoさん
スワップチェーンを使う場合と使わない場合で結果が異なります。
フロントバッファに描画しバッファを切り替えない方法では、描画内容は保持されますが、描画が中途の画面が表示される可能性があります。
バックバッファに描画しバッファを切り替える方法では、描画内容が保持される保証はありませんが、描画が中途で表示されることはありません。
また、バックバッファに描画しているとき画面に表示されているのはフロントバッファなのでアプリ側の処理が重くても表示が崩れることはありません。

DXライブラリはデバイスの初期化時にスワップチェーンを構成しているはずなので、バックバッファを使わないとすると、画面1枚分のビデオメモリをまるまる無駄にするだけです。
DXライブラリのソースコードを確認したわけではないですが、フロントバッファを描画対象にした場合に特殊な処理を行っていると思われます。

イベントドリブンの場合でも描画するときは全部描き直すのではないでしょうか。
描画内容を上書き累積していくような場合、イベントドリブンかどうかに限らずオフスクリーンを使います。
最後に編集したユーザー ISLe on 2013年11月25日(月) 15:51 [ 編集 1 回目 ]

アバター
usao
記事: 1889
登録日時: 12年前

Re: 改めましてお勉強

投稿記事 by usao » 11年前

>ISLe様
人様の日記スペースでは邪魔になると思い,私の日記側
blog.php?u=1166&b=3950
にて返信させていただきました.
(私の曖昧な状態故に,長々としたものになってしまいましたが…)

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

>usao様

>ISLe様

 コメントありがとうございます!

>単に個人的興味で尋ねるのですが,そのコードで出たウィンドウ内の画像は
>正しく再描画されるのかどうか教えていただけるとうれしいです.

 というのは、while(333333333333)の事でしょうか。
 私(程度の者が見た程度では)while(1)の時と変わりなく思えます。

 私の日記で良ければ何を長々書いて頂いても結構ですよ。
 気の利いたコメントは返せませんが、見てもらえてるというモチベの素になりますのでw

アバター
usao
記事: 1889
登録日時: 12年前

Re: 改めましてお勉強

投稿記事 by usao » 11年前

勝手に沸いてきて 好き勝手してすみません.
>というのは、while(333333333333)の事でしょうか。
いえ,codeタグで示されているプログラムの動きについてです.
描画に関するコードは DrawGraph の一行だけで,最初に一回やっているだけに見えるのですが,
これでも絵がずっと表示され続けるのだろうか? という些細な疑問です.
(別のウィンドウをそのプログラムのウィンドウの上にかぶせてぐりぐり動かしたりしても
 表示がおかしくならないのかな? という)

どうにも こういう微妙にどうでもよさそうなことが気になる性分でして…

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

いやいや、ようつべでジャッキーチェンやらトニージャーのアクションシーンに見惚れていたらこんな時間に・・・。

1.6章
この動きは、MSXを見ているようでなんだか懐かしいw

1.7章
裏画面を用意してから表画面に表示か。
紙芝居で裏に次のシーンを用意する的な事なのかな?

よーし動いた。おっけ~☆ウフフ♪ (っていう表現はもう古いのかもなぁ)

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

よし、1.8章、1.9章終了。

使用する関数の中身がまだサッパリ分からないけど、とりあえず順調に進んでいる。ふひぃ。