初歩の質問・・・です。。

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

初歩の質問・・・です。。

#1

投稿記事 by LisetteLander » 16年前

ただいま勉強中なのですが、

http://dixq.net/g/
上の31章でいじってたら移動速度が速くなりました><;
ゆっくり動かすにはどうしたらいいですか?


#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了

int i,x1=640-24,x2=0,image[16];

LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ; //画像を分割してimage配列に保存


while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了
x1-=3;
x2+=5;
for(i=0;i<100;i++)
DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写
if(x1<0) break; //画像1のx座標が0未満になれば終了
ScreenFlip() ;//裏画面データを表画面へ反映
}


WaitKey(); // 何かキー入力があるまで待つ
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}

朽木

Re:初歩の質問・・・です。。

#2

投稿記事 by 朽木 » 16年前

まずはプログラムを理解することが大切です。

プレイヤーの移動速度はどこかで値で定義されているのではないでしょうか。(ごめんなさいソース見てません)

その変数が使用されている箇所を探し、値が元と違えばそれを直してみれば良いと思います。

それではない、それでもない場合、フレームレートが60以下でなければ、

描画タイミングを書き換えてしまった可能性があります。

フレームレートが60以下になるには、1000 / 60 ミリ秒待つ必要があります。

計算苦手なので自分で計算して値を見比べてください。私と同じくわからなければ、コンパイラに任せます。(※)

私が今この状況で考えられるのはこの位です。お役にたてなかったらごめんなさい@@;



※定数同士の計算はコンパイラが事前に計算してくれることがありますので、

 そのまま1000 / 60と書いてしまった方が良いかもしれません。(例: a = 1 + 2 + b; -> 最適化 -> a = 3 + b;)


STGの方かと思ったら全然違かった… 忘れてください@@;;;

LisetteLander

Re:初歩の質問・・・です。。

#3

投稿記事 by LisetteLander » 16年前

速い・・・というより瞬間なんです;;
一瞬パッツと移るだけ・・・(それでも移動はさせてるんですが・・・

SooA

Re:初歩の質問・・・です。。

#4

投稿記事 by SooA » 16年前

規約と注意事項を読みましょう。
ソースを貼る場合はタグを使って投稿しましょう。

原因はある関数を使っているが意味が無いことにあります、
その関数を削除するか意味を持たせましょう。

あ~る

Re:初歩の質問・・・です。。

#5

投稿記事 by あ~る » 16年前

これなんでx1とかx2とか使ってるんですか?
もし画像の座標をx1とかx2にしたいのならDrawGraphで座標を決める時にランダムな値じゃなくて、x1とかを使えばちゃんとなると思いますよ。

BEMANI

Re:初歩の質問・・・です。。

#6

投稿記事 by BEMANI » 16年前

>>soodさん
for(i=0;i<100;i++)
DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写

ここの第一引数と第二引数がランダムな値になっています。
Xが640まで、Yが480までを、for文で100回処理しています。
この処理は、x1<0 になるまで繰り返されます。

望みどおりの結果になるかどうかは解りませんが、
DrawGraph(x1, x2, image[4],TRUE); とすることで、ランダムな場所に描画は避けられると思います。

木霊

Re:初歩の質問・・・です。。

#7

投稿記事 by 木霊 » 16年前

 描画先を裏画面に指定していた関数を消してしまっているようです。
SetDrawScreen ( DX_SCREEN_BACK );
 をwhileループの前に入れてください。

 また、裏画面に描画された画像は
ScreenFlip ();
 が実行されるまで表示されません。

SCI

Re:初歩の質問・・・です。。

#8

投稿記事 by SCI » 16年前

直接の原因は「for文」です。for文(というか文全般)の用法を確認してみましょう。

LisetteLander

Re:初歩の質問・・・です。。

#9

投稿記事 by LisetteLander » 16年前

そうでしたか。。
みなさんありがとうございました><;

Dixq (管理人)

Re:初歩の質問・・・です。。

#10

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

上から順番に処理の内容を見てみましょう。
while(1){ 
    ClearDrawScreen(); //裏画面のデータを全て削除 
    if( ProcessMessage() == -1 ){
        break ; //異常がおきたら終了
    } 
    x1-=3;//x1を3少なくする
    x2+=5;//x2を5多くする
    for(i=0;i<100;i++){//100処理
        DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写 
    }
    if(x1<0){
         break; //画像1のx座標が0未満になれば終了 
    }
    ScreenFlip() ;//裏画面データを表画面へ反映 
}

ですよね。
「今何がしたいか」を明確にし、それをまず日本語で書いてみてから、プログラムにすると
解り易いかもしれません。
 

閉鎖

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