DXライブラリ初心者

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
けだま

DXライブラリ初心者

#1

投稿記事 by けだま » 9年前

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{

	//ウィンドウモード
	ChangeWindowMode(true);

    int Cr_white,Cr_brack;

    if( DxLib_Init() == -1 )            // DXライブラリ初期化処理
    {
         return -1;            // エラーが起きたら直ちに終了
    }


    Cr_white = GetColor(255,255,255) ;        // 白色の値を取得
    Cr_brack = GetColor(0,0,0) ;        

    DrawBox(140,60,500,420,Cr_white,TRUE) ;	//四角表示、360*360
	
	DrawLine(260,40,260,400,Cr_brack) ;    // 縦線を描画
	DrawLine(380,40,380,400,Cr_brack) ;    
	
	DrawLine(140,180,500,180,Cr_brack) ;    // 横線を描画
	DrawLine(140,300,500,300,Cr_brack) ;  
	
	if(CheckHitKey( KEY_INPUT_A ) == 1)
    	DrawBox(140,60,500,420,Cr_white,TRUE) ;	//重ね塗り
	
	//エスケープ押したら終わり
	while(1){
		if(CheckHitKey( KEY_INPUT_ESCAPE ) == 1)
			break;	
    }
	
	DxLib_End() ;                // DXライブラリ使用の終了処理
    return 0 ;                // ソフトの終了



}
 

DXライブラリ初心者です。
①Aのコードを押しても四角形の重ね塗りができません。ラインがある四角形の上に白い四角形を重ねて表示させたいです。
どうすればいいでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: DXライブラリ初心者

#2

投稿記事 by みけCAT » 9年前

けだま さんが書きました:①Aのコードを押しても四角形の重ね塗りができません。
「①Aのコード」とは何ですか?
けだま さんが書きました:ラインがある四角形の上に白い四角形を重ねて表示させたいです。
どうすればいいでしょうか?
ラインがある四角形の上に白い四角形を重ねて表示させるプログラムを書き、コンパイルし、実行すればいいでしょう。
とりあえず、描画を1回だけするのではなく、裏画面処理をして繰り返し描画するようにするといいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

けだま

Re: DXライブラリ初心者

#3

投稿記事 by けだま » 9年前

Q 「①Aのコード」とは何ですか?
A Aのキーを押したら↓
if(CheckHitKey( KEY_INPUT_A ) == 1)
DrawBox(140,60,500,420,Cr_white,TRUE) ; //重ね塗り
この文が動くと思っていました。
裏画面処理の知識は無いので勉強します。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: DXライブラリ初心者

#4

投稿記事 by Dixq (管理人) » 9年前

DXライブラリのことならうちのゲームプログラミングの館を見てもらえたら十分勉強できますよ。
http://dixq.net/g/

> A Aのキーを押したら↓
> if(CheckHitKey( KEY_INPUT_A ) == 1)
> DrawBox(140,60,500,420,Cr_white,TRUE) ; //重ね塗り
> この文が動くと思っていました。

それは根本的にソースコードが分かっていないと言わざるを得ません。
C言語の処理をよく考えてみましょう。
一瞬でこの処理はwhile文に入り、ものすごい速さでこのwhile文が回ります。
もしかくなら

if(CheckHitKey( KEY_INPUT_A ) == 1)
DrawBox(140,60,500,420,Cr_white,TRUE) ; //重ね塗り

の処理をwhile文の中に入れるか・・ですが、これでは離しても重ね塗りされたままですしメッセージ処理もしていないのでよくありません。
while文で全部書いて全部消すというループでプログラムが動くように改良してみてください。
プログラムの組み方はゲームプログラミングの館を一通り見ていただければ分かります。

けだま

Re: DXライブラリ初心者

#5

投稿記事 by けだま » 9年前

コード:

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{
 
    //ウィンドウモード
    ChangeWindowMode(true);
 
    int Cr_white,Cr_brack;
 
    if( DxLib_Init() == -1 )            // DXライブラリ初期化処理
    {
         return -1;            // エラーが起きたら直ちに終了
    }
 
 
    Cr_white = GetColor(255,255,255) ;        // 白色の値を取得
    Cr_brack = GetColor(0,0,0) ;        
 
    DrawBox(140,60,500,420,Cr_white,TRUE) ; //四角表示、360*360
    
    DrawLine(260,40,260,400,Cr_brack) ;    // 縦線を描画
    DrawLine(380,40,380,400,Cr_brack) ;    
    
    DrawLine(140,180,500,180,Cr_brack) ;    // 横線を描画
    DrawLine(140,300,500,300,Cr_brack) ;  
    
//    if(CheckHitKey( KEY_INPUT_A ) == 1)
//        DrawBox(140,60,500,420,Cr_white,TRUE) ; //重ね塗り
    
	
	
	while(1){
		if(CheckHitKey( KEY_INPUT_A ) == 1){
			DrawBox(140,60,500,420,Cr_white,TRUE) ; //重ね塗り
			break;
		}
	}
		
    //エスケープ押したら終わり
    while(1){
        if(CheckHitKey( KEY_INPUT_ESCAPE ) == 1)
            break;  
    }
    
    DxLib_End() ;                // DXライブラリ使用の終了処理
    return 0 ;                // ソフトの終了
	
}
 
Dixq (管理人)へ
上のプログラムが自分がしたかったことです。解決できました。ありがとうございます。
「一瞬でこの処理はwhile文に入り、ものすごい速さでこのwhile文が回ります。」この文を見て気づきました。

閉鎖

“C言語何でも質問掲示板” へ戻る