スクリプトを更新したのに、何も変わらない
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう
・GameCanvasの機能:今週使う変数、メソッド
gc.DrawOnlineImage(url,x,y);
・urlにアクセスして取得した画像をxyに表示します。
・内部では、urlをキーにしてた保存領域に画像情報をDLしていき、
DLが終わり次第表示します(終わるまでは何も表示せず処理が終わります)
gc.GetOnlineTextAsync(url,out str);
・urlにアクセスして、通信結果をテキストとして返します。
前回、apkが作れなかった人、xcodeを用いてうまく実機で動かせなかったmax&iOSユーザーは、前回の課題の問題解決から始めましょう。 「課題の進め方」 ※今回は第7回なので、フォルダはk07に改名してください。 サンプルの起動を確認し、スクリプトが編集できる状態になったら、 続きを読み進めてください。
(クラスに入った直後)に変数の宣言を足す
(InitGame()の中)に初期化処理を足す
gc.SetResolution(640, 480);
(UpdateGame()の中)に下記の行を足す
Draw()の中(ClearScreenの後)に下記の行を記載
gc.ClearScreen();
gc.SetColor(0, 0, 0);
gc.SetFontSize(36);
gc.DrawOnlineImage("https://web.sfc.keio.ac.jp/~wadari/sdp/k07_web/Player.png",320,240);
//変数宣言の所に追加
int score=0;
string pname = "t93520mw";
string url = "";
string str = "";
//initGameに追加
score = gc.Random(0,100);
//updateGameに追加
if(gc.GetPointerFrameCount(0) ==1 ){
url = "https://web.sfc.keio.ac.jp/~wadari/sdp/k07_web/score.cgi?score="
+ score + "&name=" + pname;
gc.GetOnlineTextAsync(url,out str);
}
//drawGameに追加
gc.DrawString(str,0,300);
などを適宜配置しましょう。
第4回の課題を改造して、降ってくる箱を避けるゲームを作ってみましょう。
何もしないと右に動いていく
タップする度に移動方向が左右に切り替わる
(常にどちらかに動く)
箱は、ゲームが進むとだんだん大きくなっていく。
箱に触れたらゲームオーバー。
経過秒数がスコアになる。
変数gameStateを使って、タイトル画面、ゲーム中、ゲームオーバー画面で、
それぞれ処理内容や表示するものを切り替えてみましょう。
//変数宣言の所に↓を追加
int gameState = 0;
//updateGameとdrawGameにgameStateによる切り替え処理を追加
//それぞれに追加します
if(gameState == 0){
//タイトル画面の処理
}
else if(gameState == 1){
//ゲーム中の処理
}
else if(gameState == 2){
//ゲームオーバー時の処理
}
//更に追加で用意する変数、初期化
//(課題2で使ったscore,url,strも引き続き使用します)
const int BOX_NUM = 10;
int[] box_x = new int [BOX_NUM];
int[] box_y = new int [BOX_NUM];
int[] box_speed = new int [BOX_NUM];
int box_w = 24;
int box_h = 24;
int player_x = 304;
int player_y = 400;
int player_dir = 1;
int player_speed = 5;
int count =0;
//初期化の処理
//void resetValue()という初期化用メソッドを用意しても良いでしょう
for(int i =0 ; i < BOX_NUM ; i ++ )
{
box_x[i] = gc.Random(0,616);
box_y[i] = -gc.Random(100,480);
box_speed[i] = gc.Random(3,6);
}
// 動き
//gameStateが0の時:タップしたらgameStateを1にします。
if(gc.GetPointerFrameCount(0) ==1 ){
gameState = 1;
}
//gameStateが2の時:タップしたらスコアを送信(課題2を参考に)
//gameStateが1の時:下記の処理を加えます
count++;
score = count/60;
box_w = 24+count/300;
box_h = 24+count/300;
if(gc.GetPointerFrameCount(0) ==1 ){
player_dir = -player_dir;
}
player_x += player_dir * player_speed;
for(int i =0 ; i < BOX_NUM ; i ++ )
{
//箱を動かす処理
box_y[i] = box_y[i] + box_speed[i];
if(box_y[i]> 480){
box_x[i] = gc.Random(0,616);
box_y[i] = -gc.Random(100,480);
box_speed[i] = gc.Random(3,6);
}
//playerと箱の当り判定
if (gc.CheckHitRect (
player_x,player_y,32,32,
box_x[i],box_y[i],box_w,box_h)) {
//当たった時の処理
gameStateを2にする
}
}
//playerが画面左右に着いてもgameOverになるように
if(player_x < 0 || player_x > 608){
gameStateを2にする
}
// 描画
//gameStateが0の時は"Title"と表示
//(具体例)
gc.DrawString("TITLE",320,240);
//gameStateが2の時は"Game Over"と表示、スコアと通信結果も表示
//(具体例)(通信結果は課題2の物をそのまま使用)
gc.DrawString("GAME OVER",320,240);
gc.DrawString("SCORE:"+score,0,0);
//gameStateが1の時はゲーム画面を表示
playerの描画(課題1を参考に、playerx,playeryを用いて座標指定)
//箱の描画
for(int i =0 ; i < BOX_NUM ; i ++ ){
gc.FillRect(box_x[i],box_y[i],box_w,box_h);
}
などを適宜加えて行きましょう。
画面長押しで再度遊べるようにする、 アニメーションをつけてみる、ルールを変えてみる、 取ってはいけないものを作る、入れない場所(壁)を作ってみる、など、 より良くする案を考えてみましょう。
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう