トップページ > 過去ログ > 記事閲覧
LoadDivGraph関数はC#では使えませんか?
名前:三井雄一 日時: 2007/05/06 21:00

管理人様はじめまして。DXライブラリをお借りして、C#でゲームプログラミングを始めています。 「14歳からはじめるわくわくC++」のサンプルをC#で作ろうと思ったのですが、 (DX.)LoadDivGraph関数は、配列が含まれているため、やはりC#では使用できないのでしょうか? 結局、アニメをさせるのには、オリジナルのメソッドで、DrawRectGraphで切り出したグラフィックを連続的に再生してアニメにする、という形になるのでしょうか?

Page: 1 |

Re: LoadDivGraph関数はC#では使えませんか? ( No.1 )
名前:Will 日時:2007/05/07 07:23

C#用ライブラリを使用されていますか? C#用DXライブラリのreadmeに以下のように書かれています。 ---------------------------------------------- LoadDivGraph 等の int 型のポインタを渡すものは、out int HandleBuf のように定義されています。 というか、文字列以外のポインタは全て out で渡すようになっています。 例: int Handle[] = new int[25]; DX.LoadDivGraph( "test2.bmp", 25, 5, 5, 10, 10, out Handle[0] ); 上記以外の文法上の違いはありませんので、基本的にはC言語版のDXライブラリのリファレンスをご参照ください。
Re: LoadDivGraph関数はC#では使えませんか? ( No.2 )
名前:三井雄一 日時:2007/05/07 19:21

Will様。さっそくのお答えありがとうございます。 正直なところ、ポインタとは何なのかがわからず、out int HandleBufの意味も理解できなかったのですが、例を書いていただいたので、これを参考として何とかなりそうです。 本当にありがとうございました。
Re: LoadDivGraph関数はC#では使えませんか? ( No.3 )
名前:三井雄一 日時:2007/05/07 20:45

int[] GazouNum = new int[10]; DX.LoadDivGraph("test_jiki.bmp", 3, 3, 1, 48, 32, out GazouNum[0]); で画像を読み込み、 DX.DrawGraph(300, 200, GazouNum[0], DX.TRUE); で描画しようとしたのですが、うまくいきません(ウインドウが出る前にデバッグが停止します。 画像読み込み段階で失敗している感じです) どこがおかしいのでしょうか・・・ 最初の文がint GazouNum[] = new int[10];だと構文エラーとなりました。
Re: LoadDivGraph関数はC#では使えませんか? ( No.4 )
名前:星樟八郎 日時:2007/05/07 21:18

こちらの場合、最初に「14歳〜C」を読んで、 プログラムの制作(というより改造に近い)を始めました。 絵などのファイルからデータを変数にロードするところは、 いかなる量にも対応できるように、配列変数に対して、 realloc,calloc,mallocといったような関数を使っています。 そのあと「〜C++」を読み、コンテナクラスというものを知って取り入れると、 上の関数や配列変数は使わなくなりました。 ただ1ヶ所、LoadDivGraphを使うところでは、配列変数を使わざるを得ないようです。 例えば、こんな感じで使っています。 string fn; int *buf,x,y,w,h,p; ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ fnにファイル名を、x,y,w,hに各種データを代入 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ p=y*x; buf=(int *)calloc(p,sizeof(int)); LoadDivGraph(fn.c_str(),p,x,y,w,h,buf); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ buf内のデータを別のコンテナクラスに代入 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ free(buf); 初心者の人は、もっと簡単なやり方でいいと思います。 自分の場合、エラー等も起こらず正常に動いていると思いますが、 もっとうまいやり方があったりしないだろうか、とも。 今回の書き込み、自分の体験談ですが、 他の人が参考にして何かあっても責任はもちません。
Re: LoadDivGraph関数はC#では使えませんか? ( No.5 )
名前:Will 日時:2007/05/07 21:25

C#は専門外なので間違ったことを書いていたらご容赦ください。 まず、LoadDivGraphの戻り値を確認してください。 -1であれば画像に問題があるかLoadDivGraphに渡す値が間違っていると思います。 引数の値から画像サイズは144*32と推測しますがあっていますか? >ウインドウが出る前にデバッグが停止します。 とありますが、DxLib_Initよりも前にLoadDivGraphをコールしていませんよね? 上記のどちらも問題ないようでしたら、ソース丸ごと貼り付けてください。 >管理人さんへ int[] Handle = new int[25]; が正しいのでreadmeの修正をお願いします。
Re: LoadDivGraph関数はC#では使えませんか? ( No.6 )
名前:管理人 日時:2007/05/14 00:55

> 三井雄一さん  始めまして。  Willさんと被りますが、DxLib_Init の前に LoadDivGraph を 実行しているということはありませんでしょうか?  また、もしプログラムに変な個所が無いのに、ということでしたら これまた Willさんと被りますが、プログラムを丸ごとこちらの掲示板に お書き込み下さい。私の方でも試してみたいと思います。m(_ _)m > Will さん >int[] Handle = new int[25];  ご指摘有難う御座います、修正しました。
Re: LoadDivGraph関数はC#では使えませんか? ( No.7 )
名前:よしかず 日時:2007/07/01 03:50

一応、以下のようなコードで成功しました。参考まで。 ttp://webstorage.web.fc2.com/recent/Game_Program/005_MiniTech_CS_LoadDivGraph/005_CS_LoadDivGraph.htm [C#プロジェクトファイル] ttp://webstorage.web.fc2.com/recent/Game_Program/005_MiniTech_CS_LoadDivGraph/006_CS_DotNetSample.zip //----------------------------- //Program.cs using System; using System.Collections.Generic; using System.Windows.Forms; using DxLibDLL; namespace DotNetSample { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { int[] GrHandle=new int [16]; // ウインドウモードで起動 DX.ChangeWindowMode(DX.TRUE); // 初期化 if (DX.DxLib_Init() == -1) return; // 画像の読み込み DX.LoadDivGraph("DivTest01.png", 16, 4, 4, 32, 32, out GrHandle[0]); // 描画対象を裏画面に DX.SetDrawScreen(DX.DX_SCREEN_BACK); // 閉じられるか、何かキーが押されるまでループ while (DX.ProcessMessage() == 0 && DX.CheckHitKeyAll() == 0 ) { // 画面の初期化 DX.ClearDrawScreen(); // 画像の描画 DX.DrawGraph(200,200, GrHandle[7], DX.TRUE); // 裏画面の内容を表画面に反映 DX.ScreenFlip(); } // 後始末 DX.DxLib_End(); } } }
Re: LoadDivGraph関数はC#では使えませんか? ( No.8 )
名前:よしかず 日時:2007/07/01 03:55

書き忘れていましたが、全体グラフィックは128*128で、 32*32で16分割しています。

Page: 1 |