トップページ > 記事閲覧
点が表示されない
名前:lateNight 日時: 2018/04/07 23:59

#include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } DrawPixel( 320 , 240 , GetColor( 255,255,255 ) ) ; // 点を打つ WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } プログラミング自体初心者です。初めてDXライブラリを使いました。 上記コードを書きましたが、画面中心に点が描画したかったのですが、 画面が真っ暗のままで何も表示されません。 対処法を教えてください。
メンテ

Page: 1 |

Re: 点が表示されない ( No.1 )
名前:管理人 日時:2018/04/08 00:21

うーん何も表示されませんでしたか・・・ こちらのプログラムでしたら画面の中心付近で左右に動く四角形が表示されますでしょうか #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x, add ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ x = 0 ; add = 8 ; while( ProcessMessage() == 0 ) { // 移動 x += add ; if( x < 0 || x > 640 ) add = -add ; // 画面のクリア ClearDrawScreen() ; // 四角形の描画 DrawBox( x, 240 - 32, x + 64, 240 + 32, GetColor( 255,255,255 ), TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: 点が表示されない ( No.2 )
名前:lateNight 日時:2018/04/08 04:11

ご回答ありがとうございます。 はい。画面中央に白い正方形が左右に移動すしているのを確認しました。
メンテ
Re: 点が表示されない ( No.3 )
名前:管理人 日時:2018/04/08 12:24

おお、表示されましたか では、すみません、よろしければ以下の4つのプログラムでそれぞれ結果がどうなるか教えていただけないでしょうか? その1:フルスクリーンモードで画面の中心に四角形を描画してキー入力待ちをするプログラム 問:画面の中心に四角形が表示されますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理 DrawBox( 320 - 32, 240 - 32, 320 + 32, 240 + 32, GetColor( 255,255,255 ), TRUE ) ; // 四角形を描画する WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } その2:ウィンドウモードで画面の中心に四角形を描画してキー入力待ちをするプログラム 問:ウィンドウの中心に四角形が表示されますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; // ウィンドウモードで起動する指定 if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理 DrawBox( 320 - 32, 240 - 32, 320 + 32, 240 + 32, GetColor( 255,255,255 ), TRUE ) ; // 四角形を描画する WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } その3:フルスクリーンモードで画面の中心付近で左右に動く四角形が表示されるプログラム 問:画面の中心付近を左右に動く四角形が表示されますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x = 0, add = 8 ; if( DxLib_Init() < 0 ) return -1 ; // DXライブラリの初期化 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面にする while( ProcessMessage() == 0 ) { x += add ; // 移動 if( x < 0 || x > 640 ) add = -add ; // 画面端で移動方向を反転 ClearDrawScreen() ; // 画面のクリア DrawBox( x, 240 - 32, x + 64, 240 + 32, GetColor( 255,255,255 ), TRUE ) ; // 四角形の描画 ScreenFlip() ; // 裏画面の内容を表画面に反映 } DxLib_End() ; // DXライブラリの後始末 return 0 ; // ソフトの終了 } その4:フルスクリーンモードで画面の中心付近を左右に動く点が表示されるプログラム 問:画面の中心付近を左右に動く点が表示されますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x = 0, add = 8 ; if( DxLib_Init() < 0 ) return -1 ; // DXライブラリの初期化 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面にする while( ProcessMessage() == 0 ) { x += add ; // 移動 if( x < 0 || x > 640 ) add = -add ; // 画面端で移動方向を反転 ClearDrawScreen() ; // 画面のクリア DrawPixel( x, 240, GetColor( 255,255,255 ) ) ; // 点の描画 ScreenFlip() ; // 裏画面の内容を表画面に反映 } DxLib_End() ; // DXライブラリの後始末 return 0 ; // ソフトの終了 } もし『その1』〜『その3』で四角形が正常に表示されましたら、単純に 『DrawPixel で描かれる”点”が小さすぎて見えないだけ』の可能性があります 仮にそうだった場合ですが、実際のプログラムでは DrawPixel を使用することは殆どありませんので、 『使い方』ページにあるプログラムが正常に動かないことは気にせずにプログラミングの学習や開発を先に進めてください m(_ _;m
メンテ
Re: 点が表示されない ( No.4 )
名前:was-blue.0793 日時:2018/04/09 18:52

横から失礼します。 DrawPixelを使用するプログラムとして「スノーノイズを再現する」プログラムを書いてみたのですが、 こちらのプログラムは正常に動くでしょうか? これで大量の点が描画されることになりますので点は見えやすいと思います。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (DxLib_Init() == -1) return -1; SetDrawScreen(DX_SCREEN_BACK) while(ProcessMessage() == 0) { ClearDrawScreen(); for (int x = 0; x < 640; x++) for (int y = 0; y < 480; y++) if (GetRand(5) == 0) DrawPixel(x, y, GetColor(255,255,255)); ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 点が表示されない ( No.5 )
名前:lateNight 日時:2018/04/16 06:57

管理人さん、was-blue.0793さん お二人とも助けて頂きありがとうございます。 回答が遅くなりまして大変申し訳ございません。 別件ですが、#include <stdio.h>が読み込まれないエラーが発生しておりましたので、 その対処をしてました。 その1とその2は正常に動作しました。 その3も画面の中心付近を左右に動く四角形が表示されますが、 escキーを押しても画面が消えなかったので、winodwsキーを押してから ウィンドウを閉じました。 その4は一番最初に投稿した、 以下の点を打つプログラムと同様に フルスクリーンモードで何も表示されず、ただ真っ暗なままでした。 また、escキーを押して画面が消えなかったので、 こちらもwinodwsキーを押してから ウィンドウを閉じました。 <点を打つプログラム> #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } DrawPixel( 320 , 240 , GetColor( 255,255,255 ) ) ; // 点を打つ WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } was-blue.0793さんが作ってくださった スノーノイズを再現するプログラムを実行しました。 正常に動作しました。 ただ、こちらもescキーを押して画面が消えなかったので、 同様にwinodwsキーを押してから ウィンドウを閉じました。
メンテ
Re: 点が表示されない ( No.6 )
名前:gdrop 日時:2018/04/16 07:48

lateNightさん その1と2はescに限らずキーを押せば終了します それ以外は(というかフルスクリーン、ウィンドウモードを問わず Windowsアプリは)Altを押しながらF4を押して終了させるのが一般的です
メンテ
Re: 点が表示されない ( No.7 )
名前:lateNight 日時:2018/04/16 17:51

gdropさん アドバイスをありがとうございました。 勉強になりました。 私が投稿した<点を打つプログラム>と管理人さんが 送ってくださったその4が正常に表示されませんが、 もし可能であればその理由を教えていただくことは可能でしょうか?
メンテ
Re: 点が表示されない ( No.8 )
名前:gdrop 日時:2018/04/17 07:35

「正常に表示されない」のか「1ドットが小さいので見えない」のかをはっきりさせる必要があります。 was-blue.0793さんのプログラムはOKということは、DrawPixelは成功しているわけですから、 こちらとしてはやはり「1ドットが小さいので見えない」のではと思っています。
メンテ
Re: 点が表示されない ( No.9 )
名前:管理人 日時:2018/04/17 00:59

> lateNightさん すみません、ESCキーを押したらプログラムを終了するようにはなっていませんでした CheckHitKey( KEY_INPUT_ESCAPE ) を使用してエスケープキーが押されたかどうかを判定して、 押されていたらプログラムを終了するようにした場合の『その4』のプログラムは以下のようになります #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x = 0, add = 8 ; if( DxLib_Init() < 0 ) return -1 ; // DXライブラリの初期化 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面にする while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { x += add ; // 移動 if( x < 0 || x > 640 ) add = -add ; // 画面端で移動方向を反転 ClearDrawScreen() ; // 画面のクリア DrawPixel( x, 240, GetColor( 255,255,255 ) ) ; // 点の描画 ScreenFlip() ; // 裏画面の内容を表画面に反映 } DxLib_End() ; // DXライブラリの後始末 return 0 ; // ソフトの終了 } 『DrawPixelで描画されるはずの点が正常に表示されない』については、私も gdropさんと同じく 『DrawPixelは正常に動作しているが、1ドットが小さいので見えない』の可能性が高いのではないかと思います
メンテ
Re: 点が表示されない ( No.10 )
名前:lateNight 日時:2018/04/17 05:55

管理人さん いえ、むしろほかの方法で終了できることが分かったのでよかったです。 わざわざESCキーを押したら終了するソースコードを書いてくださりありがとうございます。 無事ESCキーを押したら終了しました。 すみません。もしできれば点を大きく表示する方法を教えていただけますでしょうか?
メンテ
Re: 点が表示されない ( No.11 )
名前:管理人 日時:2018/04/18 00:34

DrawPixel で描画される点を1ピクセル以上の大きさにすることはできませんので、DrawCircle をお使いください m(_ _)m // 円を描画する // x, y : 円の中心座標 // r : 円の半径 // Color : 色 ( GetColor で取得 ) // FillFlag : 円の内側を塗りつぶすかどうか( TRUE : 塗りつぶす FALSE : 枠線のみ ) int DrawCircle( int x, int y, int r, unsigned int Color, int FillFlag ) ; < DrawCircle のリファレンス > https://dxlib.xsrv.jp/function/dxfunc_graph0.html#R2N3 例:座標( x=100, y=100 )に半径4ピクセルの黄色い中身の塗りつぶされた円を描画する DrawCircle( 100, 100, 4, GetColor( 255,255,0 ), TRUE ) ;
メンテ
Re: 点が表示されない ( No.12 )
名前:lateNight 日時:2018/04/18 18:40

ありがとうございました。 円を描画できました。 管理人さん、gdropさん、 お二人とも感謝申し上げます。
メンテ

Page: 1 |

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

   クッキー保存