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分割しています。
|