ページ 11

星の描画について

Posted: 2011年1月18日(火) 23:34
by Ultimate
星を使ってゲームを作りたいと思っているのですが、最初が傾いて表示されます。
頂点が真上を向くようにしたいのですが、どうしたらいいでしょうか?
自分で書いてみたコードを載せます。

コード:

#include "DxLib.h"
#include <math.h>
#define PI 3.14159265358979 //円周率の設定

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
	ChangeWindowMode(TRUE);
    SetBackgroundColor(0,0,0);
    SetWindowSizeChangeEnableFlag(TRUE) ;
    SetMainWindowText("星の描画");
	DxLib_Init();
	SetDrawScreen(DX_SCREEN_BACK);
    
    double radian=0,x1=0,y1=0,x2=0,y2=0;//元の傾き・座標の変数
    double starlong=50.0;//星のサイズ
    int i,n=0;
    int White=GetColor(255,255,255);
    
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
        SetBackgroundColor(0,0,0);
        
        for(i=0;i<5;i++){
            x1=320+cos(radian+((PI*2*i)/5))*starlong;//片方のx座標
            y1=240+sin(radian+((PI*2*i)/5))*starlong;//片方のy座標
            if(i==0||i==1||i==2)n=i+2;//もう片方の座標計算用
            if(i==3||i==4)n=i-3;//もう片方の座標計算用
            x2=320+cos(radian+((PI*2*n)/5))*starlong;//もう片方のx座標
            y2=240+sin(radian+((PI*2*n)/5))*starlong;//もう片方のy座標
            DrawLine(x1,y1,x2,y2,White);.//描画
            starlong+=0.1;//だんだんおおきく
            /*radian+=2+PI/720; 回転させる。今回の場合、元の状態での傾きが分かりにくくなるのでコメントの中にいれて動作しないようにしておく。*/
        }
        
        ScreenFlip();
    }
    
    WaitKey();
    return 0;
}
これで頂点が真上にあって、だんだん大きくなっていくようになる予定だったのですが、なぜすこし傾いて表示されるのでしょうか?
回答お願いします。

Re: 星の描画について

Posted: 2011年1月18日(火) 23:53
by ISLe
sin,cosの0度は真右です。
頂点を真上にするには(画面は下が正方向なので)-90度回転させる必要があります。

Re: 星の描画について

Posted: 2011年1月19日(水) 00:18
by bitter_fox
ずれの原因はISLeさんが既に仰っているので、別のことを。

コード:

        for(i=0;i<5;i++){
                
            starlong+=0.1;//だんだんおおきく
            /*radian+=2+PI/720; 回転させる。今回の場合、元の状態での傾きが分かりにくくなるのでコメントの中にいれて動作しないようにしておく。*/
        }
これだと、一直線を描画するたびにstarlongが大きくなってしまい、次の直線の長さが変わることになると思うのですが・・・(と言っても非常に僅かなのでそんなに気にすることでもないような気がしますが・・・)

また、

コード:

#define PI 3.14159265358979 //円周率の設定
3.14...とコメントの間に全角スペースが入っていて、コンパイルすると全角スペースも一緒に置換されてしまいます。

Re: 星の描画について

Posted: 2011年1月19日(水) 00:51
by ISLe
せっかくなので。
VCで円周率の定義されたマクロM_PIを使えるようにする方法があります。

コード:

#define _USE_MATH_DEFINES
#include <math.h>

Re: 星の描画について

Posted: 2011年1月19日(水) 06:09
by Ultimate
回答ありがとうございました。

まだ学校でも三角関数は出てなく、弾幕で全方向のショットと自機狙いをつくるためだけに軽く勉強した程度だったので、知りませんでした。

コメントの欄の全角についてはこの掲示板にソースを張り付けた後に書いたので気づきませんでした...
今後気をつけたいと思います。

無事成功しました。
解決にします。