XNA:止まらずに走れ!クリップピクスリスログウィキフレパ止まらずに走れ!めげない・くじけない・あきらめない。感謝の気持ちを忘れない。ITを活用した業務改善を中心にお仕事をいただいております。【講座005】スプライトの速度Updateメソッドに書き加えられたのは、次の1行でした。UpdateSprite(gameTime);これは、UpdateSpriteメソッドを実行する、ということを意味していますが、構造化プログラミング(って懐かしい言葉だな)では、できるかぎり大雑把にプログラムの構造を理解できるように、こうやって、詳細処理は別に書く、ということを行います。実処理はUpdateSpriteに書かれているわけですね。いうわけで、UpdateSpriteメソッドを見ていくわけですが、今回はスプライトを動かしている式を見てみます。1行の解説ですが、XNAのゲームプログラミングでは重要なポイントになるはずです。UpdateSpriteメソッドの最初の1行は次のようなものでした。*(float)gameTime.ElapsedGameTime.TotalSeconds;ここで、C#の文法を勉強しましょう。a;と書かれている場合には、xにはaが加えられます。b;と書かれている場合には、yからはbが引かれます。-b;ということになります。-3.7;であれば、yには-3.7が加えられる、すなわち、yから3.7が引かれます。(float)gameTime.ElapsedGameTime.TotalSecondsが加えられる」となるわけです。0)が設定されていて、Drawメソッドで、この位置にスプライトが描画されることを意味していました。このspritePositionに下線の部分の計算結果が足され、スプライトの場所が変わっていくことを意味しています。50.0)を入れてありました。その先の(float)gameTime.ElapsedGameTime.TotalSecondsってなんでしょうか?それを理解しなければなりません。そこで、このElapsedGameTimeにカーソルを合わせて、[F1]でHelpを呼んでみます。最後にUpdateが実行されたときから、これまでに経過した時間を意味しているようです。ついでに言うと、TimeSpan構造体なので、そのプロパティに、TotalSecondsってのがありまして、秒の単位で値を返してくれるわけですから、「gameTime.ElapsedGameTime.TotalSecondsは、最後のUpdateからどのくらい経過したかを表している(秒単位)」となります。TotalSecondsはdouble型で定義されています。speedSpriteのVector2クラスのメンバーは、float型なので、型がそろっていないと掛け算がうまくいかないことがあります。このため、(float)というのを付けて、speedSpriteと掛け算を行っているわけですね。これは何を意味しているのでしょうか?実は、speedSpriteっていうスプライトの動くスピードを表している変数は、「秒速」を意味していた、ということになります。前回のUpdateから、今回のUpdateまでの経過時間を速度に掛け算することで、スプライトを動かす量(ピクセル数)を求めた、ということになります。ゲームプログラミングにおいては、キャラクタをどのくらいのスピードで動かすのか、というのは非常に重要な問題です。tなどという構文を挟んで、キャラクタの動かすスピードを調整したことがあるのではないでしょうか。いった無駄なループを回して、時間調節を行うテクニックがあったのですが、コンピュータの性能が格段に上がった現在、このような方法を使うことは無意味です。そこで、算数の時間に習った(距離)=(時間)×(速度)を使って、動かすスピードを求めていく手法が現在では一般的です。UpdateSpriteメソッドは、もう少し続きます。このまま、単に足すだけですと、ウインドウの外にスプライトが出てしまいますから、ウィンドウの枠が壁となって跳ね返るアルゴリズムが必要になってくるわけですね。それを次回に見ていきましょう。【講座002】スプライトを動かすでは、昨日に続いて、Helpに書いてあった先に進んでみたいと思います。英語の和約ばかりしていても仕方がないので、要約します。いいけど)を用意しましょう。あとで、これが動きますので、だいたい100×100ピクセルサイズから、300×300ピクセルサイズの間がいいでしょうね。別に正方形でなくてもかまいません。僕は、こんな絵をペイントで書きました。ファイル名は「face.png」です。C#の画面の右側にある、「ソリューションエクスプローラ」のところで、右クリックして、[追加]→[既存の項目]を選択します。すると、「既存項目の追加」というファイル選択ウィンドウが開きます。(*.*)」にしてしまった方が便利かもしれません。分りませんが、JPEG画像は.jpeが拡張子に設定されているみたいで、非常に使いづらいので。僕はここで、ペイントでさっき作った「face.png」を選択しました。C#のこのプロジェクトで、この画像ファイルを利用できるようになりました。したら、プログラムを書いていきましょう。ContentManager(Services);}と書かれている部分があります。Game1()」の間に次の項目を入れます。50.0f);あとで、詳しい説明をすることにして、とりあえず先に進みます。今度は、さっき折りたたんだ中で、「LoadGraphicsContent」のところを開きなおして、中身を次のようにします。ちなみに書き加えるところは「赤く」しておきました。content}ちなみに、この中で、「face」と書かれたところがあります。僕は、さっきペイントで「face.png」というのを作って、ソリューションエクスプローラに入れたわけですが、この拡張子の部分を取って、「face」となっています。作った画像が「body.jpg」であれば、ここは「body」になりますし、「ball.bmp」であれば、「ball」になります。この後は、折りたたまれた「Draw」を書き換えます。さっきと同じように書き加えるところは「赤字」にしています。Color.White);spriteBatch.End();base.Draw(gameTime);}さぁ、これで、もう実行は可能です。[F5]キーを押して、ビルド&実行をしてみましょう。左上の方に、さっき作った画像が貼られています。4では、ここまでです。終わりにする時にはウィンドウ右上の×ボタンを押しましょう。(XBOXのゲームパッドがUSBで接続されているときは、Backボタンを押してもプログラムは終了します。)今日のところはここまで。次は、当然ながら、この絵を動かすってことをやってみたいと思います。新規プロジェクトを作ってみようやっと今日から始まるプログラミング講座!ということで、ゲーム作りを進めていきたいと思います。C#ってなんだろう?ってことから始まってしまうので、いろいろと触ってみたいと思います。C#でゲームを作る、というか、ソフトウェアを作るためにいちばん最初に行うのは、「プロジェクトを作成する」ってことになります。らなければなりません。XNAをインストールしているので、「ひな形(テンプレート)」ってもので、「ゲーム」の基本パッケージってのが入っています。ムを作っていくことにします。C#を起動して、[ファイル]-[新しいプロジェクト]を選びます。Game」を選びます。Library」ってのもあるので間違えないようにしましょう。すると、ちょっとHDDが動いて、Gameのプロジェクトができあがります。いると思いますが、この中身をざっくり見るために、左側の□をクリックして、ちょっと概観を見てみたいと思います。override...」ってなっているところをまとめていくと、次のような状況になります。入っているんだな、ということがわかります。それが何を意味しているのか、よく分りませんから、Helpを使ってみるといいわけです。知りたい言葉の上で[F1]キーを押せば立ち上がります。立ちあがると、こんな画面です。「やっぱり英語か・・・。」みたいな気持ちになるかもしれませんね。C#」の項目は、日本語化されているのが多いことも分かります。Express」が英語のままなのが辛いんだな・・・と。くれ!とお願いしたくもなるわけですが、しょうがないので、英語のまま、読んでいきます。2D)という項目を見つけました。GSEを使って、簡単なスプライトベースのゲームを作るのに必要なステップを紹介しています。クリーンサイズを認識して、からっぽの空間を描くでしょう。この空っぽの空間にゲームが動いていきます。していくあなた次第です。ら、あなたは、そこにコードを挿入していけばいいんです。メソッドは、GraphicsDevice以外の他のいろいろな初期化を行うところです。メソッドは、モデルやテクスチャなどのグラフィックについて読み込むところです。メソッドは、グラフィックが解放されるときに実行されます、普通、使わなくなると、自動的に開放されるので、特に何かを書く必要はありません。ループは、ゲームロジックの更新に使うのに最も適した場所です。いう結果を決めるとか、そういうことを書き入れます。ループは、画面に物や背景を実際に書き入れる場所です。Classというものの概観がわかりました。簡単にいえば、InitializeとLoadGraphicsContentでゲームの初期化や画像の読み込みなどを行っておいて、Updateで実際のゲームの計算や処理を行って、Drawで画面に書き込むということをしていくんだ、というわけですね。(UnloadGraphicsContentはこれといって何かを書く必要はないみたい)明日は、この先のサンプルプログラムを作ってみましょう。14:57│コメント(0)│トラックバック(0)2007年07月22日ただいま、ゲーム制作中です今日は日曜日なので、会社はお休み。して、そのお見舞いに行ってきました。どちらの方も早く良くなってほしいです。一人は僕の祖母でして、明日手術ということもあり、ちょっと長めにいました。入院歴というか、僕も人生の中では、過去5回入院しているのかな?、多い方だと思うのです。お見舞いを受ける方の立場から言うと、来てもらえると嬉しいのだけど、1回同時に15人くらい来たことがありまして大変でした。長いと疲れちゃうし、早めに切り上げた方がいいよなって自分がお見舞いに行く時には思っていたりします。それでも、久しぶりにゆっくりと時間の取れるお休みでしたから、いつまでもプログラミング講座が始められないのでは仕方がないので、いろいろと仕込みをしておりました。考えながら、仕込みをしています。基本的に絵ごころがないので、ペイントで作った適当な絵を貼ったりして、自分の絵にがっかりしながら作っていますが、まぁこれは、講座中では自分で作ってね、ってことになる予定ですので、今から準備をされている方は「コンピューターを擬人化したキャラクタ」ってのをイメージしておいてください。ペイントで作るとは言いましたが、自分でお使いの絵を描くソフトがあれば、それを使ってもらっても構いませんが、基本的には「できるかぎりお金をかけない」で、できるようにしたいと思っていますので、あしからずご了承ください。別にデジカメで撮った写真をつかってもいいわけですから、それでもいいかもしれませんし。23:38│コメント(0)│トラックバック(0)2007年07月16日レーシングゲームレーシングゲーム面白い。これがタダでできるっていうだけでも儲けた気になるくらいよくできてます。Microsoftは太っ腹だなぁと痛感してしまいます。ゲーム中の画面はこちら。ソースプログラムも公開されているので、いじろうと思えばいじれるわけだよね。車のテクスチャを変えてみたり、周りの風景をいじってみたり、ゲーム中の希望としては、マップ表示が欲しかったりと、いくつか改造してみたいことがあるわけでして、それはおいおいチャレンジしてみようと思います。C#の使い方とか、XNAでの基本的なゲームの作り方とかを勉強してみようと思います。クラブってところにサンプルソースごと、いろいろな物が落ちていることを発見します。クラブhttp://creators.xna.com/日本語のいいわけページなんかもあるけれどね。クラブのコミュニティサイトは英語のみで提供されていますが、今後は日本語でもサービスを提供させていただく予定です。英語が不得意でもスターターキットやサンプルなどが、すでにたくさん配信されているので、是非とも一度足を運んでみてください。英語だと大変なんだよね。読むのに時間がかかるから・・・。クラブに行ってみると、レーシングゲームを発見します。実は、このゲームがあることを以前から知っていたので、ぜひやってみたいと思っていました。そんなわけでダウンロードします。GAME」をクリックします。Windowsの方をダウンロードします(1)。その後、(2)RacingGameWindows.vsiというファイルをダブルクリックして、インストーラを起動し、とりあえず、画面の指示に従います。C#を起動して、[ファイル]から[新しいプロジェクト]をクリックする。Kitを選んで、クリックし、OKを押す。いう翻訳(超訳になっているかしら)です。F5キーを押して起動を・・・、としたら、時間がかかるのはいいのだけど、音だけしてきて、ちっともゲームが始まらない・・・。真っ白な画面になったりする・・・。C#の画面にして、Shift+F5でデバッグ中止にすると、画面が戻ってきてます。C#の画面に持ってくるといいでしょう。これは僕個人の問題なのかどうかはわからんのですが、もう一度F5キーを押して、待っているとゲームが普通に始まるんですね。うーん・・・、何が悪いんだろう・・・。同じようにはまってしまったら、どうにか回避できますけれど、詳しい方、教えてくださいませ。INFOとか書かれていて、スペースキーやEnterキーを押しても何も始まりません...仕方がないので、マウスカーソルをウィンドウの右上の[×]に持っていって、クリックすることができましたので、一旦中止して、readme.htmを読んでみることにします。Controlsという項目があって、そこには、昔々にPCゲームで2人同時プレイをキーボードでやったときの、恐ろしい配置が書かれています。2久々に感じる無理やりなキー配置(Player1側)。ちなみに、最初、ゲームを始める際には、Fireに相当するボタンを押すことでスタートできますが...。考えると、このゲームは対戦型ゲーム。COM対戦ではないんですね。いうわけで、むりくり、右手と左手で適当にプレイして、ゲームのルールもあまりよくわからないまま、疲れて終了。このゲームを一緒にやってくれる人を募集中です。コントローラを買ってきました。VISTAで使うためには、VISTA用のアクセサリーソフトが必要のようなので、ダウンロードします。ダウンロード一覧どちらにしても、一人でゲームがしたい私は、他のゲームが欲しいので、それを探しに行く旅に出ることにします。GSEをインストールしてみましょう。ハイエンドのミドルタワーでちょっと大きいのだけども、CPUやメモリ、VGAカードがある程度性能良くないと厳しいようなんだよね。XBOXのグラフィック性能は高いので、ある程度、VGAの力が無いとゲーム開発は難しいと思われます。Duo以上にしましょう。1GB無いと厳しいし、2GB積まないとストレスが溜まります。MSDNを使いたくなると思われるので、最低4.7GBとシステムドライブに1.5GB以上の空きが必要。ま、250GB以上のHDDを載せて使いましょう。