スクリプトを更新したのに、何も変わらない
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう
・GameCanvasの機能:今週使う変数、メソッド ・(float)gc.AccelerationLastX; ・(float)gc.AccelerationLastY; ・(float)gc.AccelerationLastZ; 加速度センサーで測定されたXYZ軸の加速度
前回、apkが作れなかった人、xcodeを用いてうまく実機で動かせなかったmax&iOSユーザーは、前回の課題の問題解決から始めましょう。 「課題の進め方」 ※今回は第6回なので、フォルダはk06に改名してください。 サンプルの起動を確認し、スクリプトが編集できる状態になったら、 続きを読み進めてください。
(クラスに入った直後)に下記の行を記載
(InitGame()の中)に下記の行を記載
gc.SetResolution(720,1280);
gc.IsAccelerometerEnabled = true;
(UpdateGame()の中)に下記の行を記載
(DrawGame()の中に下記の行を記載)
gc.ClearScreen();
gc.SetColor(0, 0, 0);
gc.SetFontSize(36);
gc.DrawString("AcceX:"+gc.AccelerationLastX,0,0);
gc.DrawString("AcceY:"+gc.AccelerationLastY,0,40);
gc.DrawString("AcceZ:"+gc.AccelerationLastZ,0,80);
xy座標をfloatで用意しましょう 早さの調整用にplayer_speedもfloatで用意ししましょう。 毎フレームのacceの値をボールに反映させましょう。 (変数の宣言(Class入ってすぐのところに足す)) float player_x = 360; float player_y = 640; float player_speed = 20.0f; (動きの処理(UpdateGameに足す)) player_x += gc.AccelerationLastX * player_speed; player_y += gc.AccelerationLastY * player_speed; (描画の処理(DrawGameに足す)) gc.DrawImage(GcImage.BallYellow,(int)player_x,(int)player_y); などを適宜追加します。 ちなみにボール画像は縦横24ドットです。 余力がある人はボールが画面外に出た時に画面内に戻す処理も足してみましょう。
<用意する変数> 配列で10個分、的の為の変数を用意 xy座標、的がある状態かない状態か。 次に取るべき玉の番号 タイム クリアした状態か、など。 (具体例) const int BLOCK_NUM = 10; int[] block_x = new int[BLOCK_NUM]; int[] block_y = new int [BLOCK_NUM]; bool[] block_alive_flag = new bool[BLOCK_NUM]; int time; int next_block_num; bool isComplete; <準備> 各変数の初期化をします。 (具体例) player_x = 360.0f; player_y = 640.0f; player_speed = 20.0f; time = 0; next_block_num = 0; isComplete = false; for(int i =0 ; i < BLOCK_NUM ; i ++ ) { block_x[i] = gc.Random(0,720-40); block_y[i] = gc.Random(0,1280-40); block_alive_flag [i] = true; } <毎フレームやること> クリアした状態でなければ タイムを足す (具体例) if(isComplete == false) time++; 玉を動かす(課題2をそのまま使う) forでブロックの数だけ繰り返し 箱が存在していたら、かつ、次に取るべき箱だったら 玉と箱が接触していたら(checkHitRectで玉と箱の当り判定) 箱を消す 次に取るべき箱の番号を増やす 全部取ったら(次の番号==ボールの数だったら) クリアした状態にする (具体例) for(int i=0;i< BLOCK_NUM;i++){ if(block_alive_flag [i] && i== next_block_num){ if(gc.CheckHitRect((int)player_x,(int)player_y,24,24,block_x[i],block_y[i],40,40)){ block_alive_flag[i] = false; next_block_num++; if(next_block_num == BLOCK_NUM){ isComplete=true; } } } } <表示> timeを表示 クリア状態だったら「クリア!」と表示 (具体例) gc.DrawString("time:"+time,0,160); if (isComplete) { gc.DrawString("CLEAR!!",0,200); } 玉を表示(課題2をそのまま使う) forで10回繰り返し 箱が存在していたら、 30x30の塗り潰し四角形を表示 色を変えて、箱の番号を表示 ※重なった時の対策として、大きい番号から描画命令を送った方がベターです。 (次に取る物が分かる為) ※内部では0〜9で扱って、表示の時だけ+1しましょう。 (具体例) for(int i=0;i< BLOCK_NUM;i++){ if(block_alive_flag[i]){ gc.SetColor(255, 0, 0); gc.FillRect(block_x [i], block_y [i],40,40); gc.SetColor(0, 0, 0); gc.DrawString ("" + (i + 1),block_x [i], block_y [i]); } }
画面長押しで再度遊べるようにする、 アニメーションをつけてみる、ルールを変えてみる、 取ってはいけないものを作る、入れない場所(壁)を作ってみる、など、 より良くする案を考えてみましょう。
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう