したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

C言語

20AF:2013/05/02(木) 14:33:37
chap4のmain.cppの完成版ソース その2
--------------------------------------------------


//タイトル画面描画
void GoGameTitle(){
g_gamestate = GAME_TITLE;
}
void DrawGameTitle(){
//テキスト表示
DrawStringToHandle(100, 340, "Zキーでゲームスタート",
0x666666, g_middlefont);
//キーをチェックして画面切り替え
int key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
if(IsAKeyTrigger(key)==true) GoGameMain();
}
//ゲーム本編描画
void GoGameMain(){
g_gamestate = GAME_MAIN;
InitStage(); //ステージデータの初期化
}
void DrawGameMain(){
//衝突チェック
g_stage.isontheground = false;
Collision();
HeroState hstate = HERO_STANDING;
int key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
//主人公の位置と移動ベクトル
b2Vec2 pos = g_stage.hero->GetPosition();
b2Vec2 vec = g_stage.hero->GetLinearVelocity();
float angle = g_stage.hero->GetAngle();
//キーチェック
if(g_stage.isontheground == true){
//左右移動
if(key & PAD_INPUT_LEFT) {
vec.x = -PHS(120.0f);
g_stage.hero->SetLinearVelocity(vec);
hstate = HERO_RUNNING;
g_stage.isheroleft = true;
}
if(key & PAD_INPUT_RIGHT) {
vec.x = PHS(120.0f);
g_stage.hero->SetLinearVelocity(vec);
hstate = HERO_RUNNING;
g_stage.isheroleft = false;
}
//ジャンプ
if(IsBKeyTrigger(key) == true){
vec.x = 0;
vec.y = -62.0f;
g_stage.hero->ApplyLinearImpulse(vec, pos);
hstate = HERO_JUMP;
g_stage.isontheground = false;
}
}
//ジャンプ姿勢へ
if(g_stage.isontheground == false) hstate = HERO_JUMP;
//キャラクター描画
int animpat = (g_lasttime / (1000 / 12)) % 4;
switch(hstate){
case HERO_STANDING:
DrawRotaGraph(VIWX(pos.x), VIWY(pos.y), 1, angle,
g_images.hero[0], TRUE, g_stage.isheroleft);
break;
case HERO_RUNNING:
DrawRotaGraph(VIWX(pos.x), VIWY(pos.y), 1, angle,
g_images.hero[1 + animpat], TRUE,
g_stage.isheroleft);
break;
case HERO_JUMP:
DrawRotaGraph(VIWX(pos.x), VIWY(pos.y), 1, angle,
g_images.hero[5], TRUE, g_stage.isheroleft);
break;
}
//転倒対策
if( fabs(angle) > 0.2f ){
g_stage.hero->SetAngularVelocity(-angle*2);
}
}
//衝突判定
void Collision(){
//接触確認ループ
for(b2Contact* c = g_world.GetContactList(); c!=NULL;
c = c->GetNext())
{
if(c->IsTouching() == false) continue;
//接触しているボディを取り出す
b2Body* b1 = c->GetFixtureA()->GetBody();
b2Body* b2 = c->GetFixtureB()->GetBody();
//主人公のチェック
b2Body* hb = NULL;
b2Body* ob = NULL;
if(b1 == g_stage.hero) {hb = b1; ob = b2;}
if(b2 == g_stage.hero) {hb = b2; ob = b1;}
if(hb != NULL){
//主人公の足下確認
g_stage.isontheground = true;
}
}
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板