トップページ > 記事閲覧
画像の描画ができません
名前:たないち 日時: 2020/07/29 16:34

DXライブラリでゲームを作っている初心者です。 LoadDivGraphを使って画像を表示しているのですが、うまく描画ができません。 1チップの大きさは32pxで、3つの画像を描画しています。 他にも画像は使っていますが、マップ等に使う大きな画像はこの3つがメインです。 その際、2つまでは描画できるのですが、3つ目を描画するとその画像が真っ暗になります。 そして2つ目の画像を描画せずに、3つ目の画像を描画すると3つ目の画像は描画できます。 以前までは普通に描画できていたのですが、突然描画ができなくなりました。 メモリの容量が足りなくなったのかと思ったのですが、4.1/7.9GBとまだ空きがあります。 CPUはプログラムをビルドするとほぼ100%の状態で推移します。ただ、少し前までは3つとも描画出来ていました。 trend micro solution platform というウイルスバスターのファイルがCPU使用率をくうという記事を見たので、 一度ウイルスバスターをアンインストールして、何もない状態でプログラムをビルドしたのですが、それでも3つ目の画像が 描画されず黒い状態で映されます。 プログラムが保存されているディレクトリ全体のサイズは181MBなので、容量的にも大きく無いと思うのですが、 何が原因なのか分かりません。 分かる方が居ましたら教えて頂けると助かります。
メンテ

Page: 1 |

Re: 画像の描画ができません ( No.1 )
名前:たないち 日時:2020/07/29 16:40

ちなみに画像のサイズは 1:100×100 (単位は32pxです) 2:149×149 3:38×31 になります。 2の画像で150×150にすると黒くなり描画ができず。149×149にすると描画が出来るのでそうしています。 PCの性能は Windows10 Home インテルCeleron N3160 (4C4T、1.6GHz〜2.24GHz) メモリ8GB SSD240GB です。
メンテ
Re: 画像の描画ができません ( No.2 )
名前:はるかぜ 日時:2020/07/29 16:51

環境による問題ではなくコードによる問題の可能性が高そうなのでその状況が再現できる最小のソースコードをはってください。
メンテ
Re: 画像の描画ができません ( No.3 )
名前:たないち 日時:2020/07/29 17:26

コードを載せようと思ったのですが、2000行以上あって色々ゴチャゴチャしているので コードが原因ならもしかしたら自分1人で解決できるかもしれないのでもう少し粘ってみます。
メンテ
Re: 画像の描画ができません ( No.4 )
名前:はるかぜ 日時:2020/07/29 17:28

その現象が起きる画像を使って、それを表示する最小限のソースコードのみのプロジェクトを新たに作ってみるのが一番の近道です。 そこで現象が起きなければ元のプロジェクトのソースコードがおかしいということになります。 最小限のコードでも起きるようであれば他の要因の可能性もでてきます。
メンテ
Re: 画像の描画ができません ( No.5 )
名前:たないち 日時:2020/07/29 17:39

なるほど、ちょっとやってみます。
メンテ
Re: 画像の描画ができません ( No.6 )
名前:たないち 日時:2020/07/29 19:25

今の時点でですが、はるかぜさんが仰っていたように最小限のコードでやってみたら、解決はできませんでしたがエラーの原因かと思われるものは一つ発見できました。 結論を言うとLoadDivGraph()を行う順番が原因でした。 main関数で最初に画像をロードするようにしているんですが、最初にロードされた2つの画像は表示されますが、最後にロードされた画像は表示されません。 ただ、DXライブラリがそんな仕様だとは思わないのでもっと何かしら原因があると思っています。 #define ALL_MAP_WIDTH 100 #define ALL_MAP_HEIGHT 100 #define WORLD_MAP_WIDTH 149 #define WORLD_MAP_HEIGHT 149 #define TOWN_MAP_WIDTH 38 #define TOWN_MAP_HEIGHT 31 LoadDivGraph("all_map.png", ALL_MAP_HEIGHT*ALL_MAP_WIDTH, ALL_MAP_WIDTH, ALL_MAP_HEIGHT, 32, 32, chip_all); LoadDivGraph("world_map.png", WORLD_MAP_HEIGHT*WORLD_MAP_WIDTH, WORLD_MAP_WIDTH, WORLD_MAP_HEIGHT, 32, 32, chip_world); LoadDivGraph("town_map.png", TOWN_MAP_HEIGHT*TOWN_MAP_WIDTH, TOWN_MAP_WIDTH, TOWN_MAP_HEIGHT, 32, 32, chip_town);
メンテ
Re: 画像の描画ができません ( No.7 )
名前:ギウ 日時:2020/07/29 20:07

LoadDivGraphは使ったことないですが、パット見合ってるように見えます。 chip_townのサイズも問題ないんですよね。 >main関数で最初に画像をロードするようにしているんですが、最初にロードされた2つの画像は表示されますが、最後にロードされた画像は表示されません。 よくあるミスとしては、ファイル名が間違ってるか、ファイルが何らかの原因で読み込めない形式になってるか。 一旦、town_map.pngを別のファイルに置き換えてみて表示されるか試してみるのはどうでしょう。
メンテ
Re: 画像の描画ができません ( No.8 )
名前:たないち 日時:2020/07/29 22:31

ギウさん 他の変数の要素数も以下のようになっています。 int chip_all[ALL_MAP_HEIGHT*ALL_MAP_WIDTH]; int chip_world[WORLD_MAP_HEIGHT*WORLD_MAP_WIDTH]; int chip_town[TOWN_MAP_HEIGHT*TOWN_MAP_WIDTH]; ファイル名が間違っている事もないです。確認しました。 pngの他にbmpでも試しましたがそれでも描画されませんでした。 そういう仕様なのか管理人さんに聞くしかないですかね。
メンテ
Re: 画像の描画ができません ( No.9 )
名前:管理人 日時:2020/07/29 23:17

原因は…すみません、今の時点ではまだ分かりません… 私の環境でも同様の現象が発生するのか確認したいので、よろしければ現象の確認に使用された 『最小限のコード』をこちらの掲示板にコピー&貼り付けをしていただけないでしょうか? m(_ _)m
メンテ
Re: 画像の描画ができません ( No.10 )
名前:たないち 日時:2020/08/03 15:19

見やすいように出来る限りの最小限のコードにしました。 一応このコードでビルドしても、やはり最後のマップ(TOWN_MAP)は表示されません。 #include "DxLib.h" #pragma warning(disable : 4996)////DXライブラリでfopenを使うため #define SCREEN_WIDTH 20 #define SCREEN_HEIGHT 15 #define ALL_MAP_WIDTH 100 #define ALL_MAP_HEIGHT 100 #define WORLD_MAP_WIDTH 149 //縦横の上限は149×149 #define WORLD_MAP_HEIGHT 149 #define TOWN_MAP_WIDTH 38 //本来の値38,31 #define TOWN_MAP_HEIGHT 31 #define VOLUME 80 //音量0〜255 int SetDrawhandle;//マップを画像として出力する際に使うハンドル int chip_cursor[5];//カーソル int chip_all[ALL_MAP_HEIGHT*ALL_MAP_WIDTH]; int chip_world[WORLD_MAP_HEIGHT*WORLD_MAP_WIDTH]; int chip_town[TOWN_MAP_HEIGHT*TOWN_MAP_WIDTH]; int SoundHandle;//BGM用のハンドル int Key[256]; // キーが押されているフレーム数を格納する //プレイヤーが起動時のマップに位置する座標 int playerX = 0; int playerY = 0; //一時的なプレイヤーの座標 int kx = 0, ky = 0; //左Ctrlボタンを押しているかどうか int lc_button; int gpUpdateKey();// キーの入力状態を更新する void MovementUseMap();//マップを変更する時に使用する関数 void MapChipPassability();//移動先のマスが移動可能かどうか void displayField();//マップを描画する void gpDrawPlayer();//マップ中のプレイヤー(カーソル)を描画する void Load();//個々の数値マップから各配列に値を代入する。 //マップ配列 //all_map int all_map[ALL_MAP_HEIGHT][ALL_MAP_WIDTH];//甲画像用の配列 //smap int smap0[SCREEN_HEIGHT][SCREEN_WIDTH];//スクリーンマップ用の配列(通常時に使用) //マップ配列 //world_map int world_map1[WORLD_MAP_HEIGHT][WORLD_MAP_WIDTH];//ワールドマップ用の配列 //town_map int town_map1[TOWN_MAP_HEIGHT][TOWN_MAP_WIDTH];//タウンマップ用の配列 enum Enum_MapNumber { ALL_MAP, WORLD_MAP, TOWN_MAP, MAX_MAP }mnh;//mnh=map number hennsuu int gpUpdateKey() { while (!ProcessMessage()) { char tmpKey[256]; // 現在のキーの入力状態を格納する GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る for (int i = 0; i < 256; i++) { if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら Key[i]++; // 加算 } else { // 押されていなければ Key[i] = 0; // 0にする } } kx = playerX; ky = playerY; if (Key[KEY_INPUT_RIGHT] >= 1) { kx++; break; } if (Key[KEY_INPUT_DOWN] >= 1) { ky++; break; } if (Key[KEY_INPUT_LEFT] >= 1) { kx--; break; } if (Key[KEY_INPUT_UP] >= 1) { ky--; break; } if (Key[KEY_INPUT_TAB] >= 1) { MovementUseMap(); break; } } return 0; } //マップを移動させる関数 void MovementUseMap() { switch (mnh) { case ALL_MAP: //Tabで次のマップに進む mnh = WORLD_MAP; break; case WORLD_MAP: //Tabで次のマップに進む mnh = TOWN_MAP; break; case TOWN_MAP: //Tabで次のマップに進む mnh = ALL_MAP; break; default: mnh = ALL_MAP; break; } } //移動先のマスが移動可能かどうか void MapChipPassability() { switch (mnh) { case ALL_MAP: if (kx >= 0 && ky >= 0 && ALL_MAP_HEIGHT > ky && ALL_MAP_WIDTH > kx) { playerX = kx; playerY = ky; } break; case WORLD_MAP: if (kx >= 0 && ky >= 0 && WORLD_MAP_HEIGHT > ky && WORLD_MAP_WIDTH > kx) { playerX = kx; playerY = ky; } break; case TOWN_MAP: if (kx >= 0 && ky >= 0 && TOWN_MAP_HEIGHT > ky && TOWN_MAP_WIDTH > kx) { playerX = kx; playerY = ky; } break; } } void displayField() { int i, j; switch (mnh) { case ALL_MAP: //計算フェイズ j = 0; for (int y = -SCREEN_HEIGHT / 2; y <= SCREEN_HEIGHT / 2; y++) { i = 0; for (int x = -SCREEN_WIDTH / 2; x < SCREEN_WIDTH / 2; x++) { int x2 = playerX + x; int y2 = playerY + y; if (x2 < 0 || y2 < 0 || ALL_MAP_WIDTH <= x2 || ALL_MAP_HEIGHT <= y2) { smap0[j][i] = -1; } else { smap0[j][i] = all_map[y2][x2]; } i++; } j++; } //背景画像を全部黒マップにする for (int y = 0; y <= SCREEN_HEIGHT; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } } //描画フェイズ for (int y = 0; y < SCREEN_HEIGHT; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { if (smap0[y][x] == -1) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } else { DrawGraph(x * 32, y * 32, chip_all[smap0[y][x]], TRUE); } } } break; case WORLD_MAP: //計算フェイズ j = 0; for (int y = -SCREEN_HEIGHT / 2; y <= SCREEN_HEIGHT / 2; y++) { i = 0; for (int x = -SCREEN_WIDTH / 2; x < SCREEN_WIDTH / 2; x++) { int x2 = playerX + x; int y2 = playerY + y; if (x2 < 0 || y2 < 0 || WORLD_MAP_WIDTH <= x2 || WORLD_MAP_HEIGHT <= y2) { smap0[j][i] = -1; } else { smap0[j][i] = world_map1[y2][x2]; } i++; } j++; } //背景画像を全部黒マップにする for (int y = 0; y <= SCREEN_HEIGHT; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } } //描画フェイズ for (int y = 0; y < SCREEN_HEIGHT; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { if (smap0[y][x] == -1) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } else { DrawGraph(x * 32, y * 32, chip_world[smap0[y][x]], TRUE); } } } break; case TOWN_MAP: //原色チップの描画 //計算フェイズ j = 0; for (int y = -SCREEN_HEIGHT / 2; y <= SCREEN_HEIGHT / 2; y++) { i = 0; for (int x = -SCREEN_WIDTH / 2; x < SCREEN_WIDTH / 2; x++) { int x2 = playerX + x; int y2 = playerY + y; if (x2 < 0 || y2 < 0 || TOWN_MAP_WIDTH <= x2 || TOWN_MAP_HEIGHT <= y2) { smap0[j][i] = -1; } else { smap0[j][i] = town_map1[y2][x2]; } i++; } j++; } //背景画像を全部黒マップにする for (int y = 0; y < SCREEN_HEIGHT + 1; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } } //描画フェイズ for (int y = 0; y < SCREEN_HEIGHT; y++) { for (int x = 0; x < SCREEN_WIDTH; x++) { if (smap0[y][x] == -1) { DrawGraph(x * 32, y * 32, chip_all[0], TRUE); } else { DrawGraph(x * 32, y * 32, chip_town[smap0[y][x]], TRUE); } } } break; default: break; } } //マップ中のプレイヤー(カーソル)を描画する void gpDrawPlayer() { //int i, j; int x = SCREEN_WIDTH / 2, y = SCREEN_HEIGHT / 2; DrawGraph(x * 32, y * 32, chip_cursor[0], TRUE); } void Load() { int k; //ここのブロックは固定 k = 0; for (int j = 0; j < ALL_MAP_HEIGHT; j++) { for (int i = 0; i < ALL_MAP_WIDTH; i++) { all_map[j][i] = k; k++; } } k = 0; for (int j = 0; j < WORLD_MAP_HEIGHT; j++) { for (int i = 0; i < WORLD_MAP_WIDTH; i++) { world_map1[j][i] = k; k++; } } k = 0; for (int j = 0; j < TOWN_MAP_HEIGHT; j++) { for (int i = 0; i < TOWN_MAP_WIDTH; i++) { town_map1[j][i] = k; k++; } } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更,初期化,裏画面設定 LoadDivGraph("画像/マップチップ/カーソル(透過).png", 5, 5, 1, 32, 32, chip_cursor); LoadDivGraph("画像/マップチップ/総合画像ファイル(透過).png", ALL_MAP_HEIGHT*ALL_MAP_WIDTH, ALL_MAP_WIDTH, ALL_MAP_HEIGHT, 32, 32, chip_all); LoadDivGraph("world_map.png", WORLD_MAP_HEIGHT*WORLD_MAP_WIDTH, WORLD_MAP_WIDTH, WORLD_MAP_HEIGHT, 32, 32, chip_world); LoadDivGraph("town_map.png", TOWN_MAP_HEIGHT*TOWN_MAP_WIDTH, TOWN_MAP_WIDTH, TOWN_MAP_HEIGHT, 32, 32, chip_town); //最初にキャラが居るマップ//mnhは初期値0なのでALL_MAPの時は必要ない mnh = ALL_MAP; Load();//各マップ配列に各数値を入力する //gpUpdateKey()がボタンを押さないと先に進まない仕様になっているので //マップとキャラクターを先に表示しておく。 displayField(); gpDrawPlayer(); // while( 裏画面を表画面に反映, メッセージ処理, 画面クリア ) while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() && !gpUpdateKey()) { MapChipPassability(); displayField(); gpDrawPlayer(); //キーボードでボタンを押した時、1マスずつ余裕を持って移動できる感覚 WaitTimer(80); } DxLib_End(); return 0; }
メンテ
Re: 画像の描画ができません ( No.11 )
名前:たないち 日時:2020/07/30 14:08

因みにTabでマップを変えます。
メンテ
Re: 画像の描画ができません ( No.12 )
名前:たないち 日時:2020/07/30 17:56

色々試したのですが、chip_townに入っている値が全部0になっていました。 ある程度までは値が入っていたんですが、それ以降のチップの値が0になっていました。 そして値が入っていても、DrawGraph()で画像を描画する事ができませんでした。 他の chip_all や chip_world は画像が描画されます。 LoadDivGraph()を最後に行ったグラフィックハンドルだけ何故か描画が出来ません。 僕が調べた限りですが、多分コードに問題は無いんじゃないかと思います。 自分のPCに問題があるのか、もしくはDXライブラリの仕様に制約があるのか(使用メモリの容量だとか) 僕にはこれ以上調べられないので、画像は用意して頂かないといけないのですが、 どなたか上のコードを試して頂けると助かります。
メンテ
Re: 画像の描画ができません ( No.13 )
名前:紺帽子 日時:2020/07/31 00:28

#define ALL_MAP_WIDTH 100 #define ALL_MAP_HEIGHT 100 LoadDivGraph( "画像/マップチップ/総合画像ファイル(透過).png", // FileName:分割読み込みする画像ファイル文字列のポインタ ALL_MAP_HEIGHT*ALL_MAP_WIDTH, // AllNum:画像の分割総数 ALL_MAP_WIDTH, // XNum:画像の横向きに対する分割数 ALL_MAP_HEIGHT, // YNum:画像の縦向きに対する分割数 32, // SizeX:分割された画像一つのXの大きさ 32, // SizeY:分割された画像一つのYの大きさ chip_all // HandleBuf :分割読み込みして得たグラフィックハンドルを保存するint型の配列へのポインタ ); 分割数は10000個、X方向に100個、Y方向に100個、チップサイズは32x32 実際の"総合画像ファイル(透過).png"は3200x3200ないといけませんね なのでLoadDivGraphの使い方がマズいのだと思います 戻り値に-1が返ってきてないですか? 追記: ちょっと試してみたところ分割読み込みに対して画像が小さい場合はLoadDivGraph関数は-1を返しています またログファイルに次のような2行が出力されていました :グラフィックの分割に失敗しました。分割後の総サイズが分割元の画像よりも大きい指定になってしまっています。 in CreateDivGraphFromGraphImage :画像ファイル 〜画像パス〜\DxLogo.jpg の分割読み込みに失敗しました 確認してみてください
メンテ
Re: 画像の描画ができません ( No.14 )
名前:たないち 日時:2020/07/31 00:48

紺帽子さん 各画像のサイズは 総合画像ファイル(透過).png 3200×3200px world_map.png 4768×4768px town_map.png 1216×992px となっています。 なので画像のサイズによるエラーではなさそうです。 戻り値についてなんですが LoadDivGraphの all_map、world_map、town_map の戻り値を調べてみたんですが all_mapとworld_mapの関数は0で、後の1つは-1でした。 次にall_mapのLoadDivGraphを一番最後に持ってきたら、その関数の戻り値だけ-1でした。 この時点では順番が原因なのかと思いましたが、僕もログファイルを見てみたんですが(ログファイルがどういうものか把握してないのですが(^^;) :Graphハンドルの数が限界数( 32768 )に達していて新たなハンドルを作成できません とありました。もしかしたらこれが原因なのかもしれません。
メンテ
Re: 画像の描画ができません ( No.15 )
名前:管理人 日時:2020/07/31 02:04

> :Graphハンドルの数が限界数( 32768 )に達していて新たなハンドルを作成できません >  > とありました。もしかしたらこれが原因なのかもしれません。 はい、まさにそれが原因でした 作成できるグラフィックハンドルの最大数が 32768個で、その数を超えるグラフィックハンドルが作成されようとしてエラーとなっていました ( すみません、最大数が 65536個だと思い込んでいたので No.10 に載せていただいたプログラムを手元で実行するまで気付きませんでした orz ) とりあえずグラフィックハンドルの最大数を 262144個にしたところ問題なく全ての LoadDivGraph が 成功しましたので、よろしければその変更を加えたこちらのバージョンをお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 画像の描画ができません ( No.16 )
名前:たないち 日時:2020/07/31 12:51

管理人さん 上の通りしましたらエラーも無くマップが描画されました。 迅速な対応ありがとうございます。 ところで気になった事があるのですが、最大グラフィックハンドル数というのは1つのプロジェクトでグラフィックハンドルを扱える数の最大値ですよね。 だとすると少ないと思ったのですが。 32768個という数は、RPGゲーム等を作っていたらすぐに超えてしまうような数だと思うのですが、掲示板の過去ログにもそういった要望等は見つかりませんでした。 他の人達はどうやってこのような事を解決していってるのでしょうか。
メンテ
Re: 画像の描画ができません ( No.17 )
名前:管理人 日時:2020/07/31 23:36

私自身はRPGを作成したことが無いので推測となりますが、 ゲーム内で必要な画像を最初に全て読み込むのではなく、必要に応じて読み込むことで グラフィックハンドルの最大数を超えてしまわないようにすることができます 例:ワールドマップのシーンに行く    ↓   ワールドマップのチップを LoadDivGraph で読み込み    ↓   ワールドマップにある街に入った    ↓   ワールドマップのチップを DeleteGraph で削除    ↓   街のチップを LoadDivGraph で読み込み    ↓   街を出て再びワールドマップへ    ↓   街のチップを DeleteGraph で削除    ↓   ワールドマップのチップを LoadDivGraph で読み込み 例えばこちらのRPGツクールの素材を配布されているコミュ将様のウェブサイト <コミュ将の素材倉庫> https://comshou.wixsite.com/com-sho の、中にあります『田舎町のタイルセット』のチップセットを拝見すると 田舎壁1.png ( サイズは 768x720 )( チップ単位では 16x15、チップ数 240 ) 田舎床.png ( サイズは 768x576 )( チップ単位では 16x12、チップ数 192 ) 田舎家.png ( サイズは 768x384 )( チップ単位では 16x8、チップ数 128 ) ↑こちらの3つの画像があり、1チップ 48x48 なので、合計でチップの数は 560個となります 560個のチップで田舎町を表現することができるので、一つのチップセットを600個くらいに収めれば グラフィックハンドルのこれまでの最大数である 32768 あれば 32768 / 600 = 54 で ダンジョンや町の数が 54個くらいまででしたら上記の『例』のように町やワールドマップの 場面切り替えでチップセットを DeleteGraph で削除したり LoadDivGraph で読み込んだり しなくて良いということになります ( 実際はキャラクターの画像やモンスターの画像など色々あるので 600チップのダンジョン・町が 54個あったら読み替えが必要になると思いますが… ) なので、場面切り替えのタイミングで不要になったグラフィックハンドルの削除と必要な 画像の読み込みをしないと規模の大きいRPGでは 32768 では足りないかもしれませんが、 必要なグラフィックハンドル以外は逐一削除するようにすれば 32768 で足りなくなる事態には なかなかならない、という訳です
メンテ
Re: 画像の描画ができません ( No.18 )
名前:たないち(解決) 日時:2020/08/01 00:05

なるほど、管理人さん詳しい説明をありがとうございます。 確かにメモリの読み込みと解法はセットですからね。 DeleteGraph()の使用は考えから除外していました。 それをわざわざ最大グラフィックハンドル数を増やしてくださりありがとうございます。 そしてすいません。(^^; 今度からメモリの解放も意識してプログラミングしようと思います。 回答してくれた皆さんありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存