2007年07月

2007年07月31日

PCの用途別分類

当社KOUZIROでは、ゲームPCというカテゴリのPCの販売に力を入れています。デスクトップPC・ノートPCといった形状での分類だけでなく、用途別での分類の一つになると思います。

PCを買うときって、普通はどうするものでしょうか?
  1. お店に行って実機を見たり店員に聞く。
  2. カタログを集める。
  3. 雑誌を読む。
  4. Webでメーカーサイトを見る。
  5. PCに詳しい友人に聞いてみる。
といった方法が考えられますよね。通販も発達してきていますから、3や4で商品を購入する方も増えてきています。ただ、「お客様は本当に欲しいものがわからない」ということが書かれた「凡人が最強営業マンに変わる魔法のセールストーク」って本を思い出します。ちなみに、Amazonでは賛否両論に分かれている本ですけれど、わかりやすい本なので、営業で悩んでいる方にはオススメです。

それはさておき、「PCが買いたい」ときは何かしら、「あれをしたい」とか「これをしたい」とか、そういう目的があると思うんですよね。ですから、そういった目的を入り口にした分類の仕方があると選びやすくなるだろうな、と思っているんです。

ちなみに、「子ども向けパソコン」っていう企画もはじめてみました。最初なので手探りのところはありますが、まだ、幼児向け、ってところしか説明し切れていません。こちらでいらっしゃったお客様には対象年齢を伺って、更にいろいろなソフトやPCを提案できるコンテンツへの充実を図りたいですね。

【アイデア】というか【妄想】かもしれないけれど、小学校高学年向けに夏休みの宿題で絵の提出を「水彩7」でやってみようとか。タブレットとノートPCとプリンタとソフトのセットなんかがいいですよね。以前から、「百科事典」のプリインストールなんかを考えていたこともありますし、もっと力を入れてみてもいいと思うんです。
最近は、ネットトレードにはまっている人も増えていますし(社内でも・・・)、トレード用PCなんかも、しっかりと提案していきたいですね。

話は最初に戻りますが、ゲームPCなどは、それでも更に特殊な世界があって、新しいCPUやグラフィックカードが出ると買替えが発生したりします。結構高額なPCなんだけど、新しいモノが出てしまうと、つい気になってしまうんですよね。そういう自分も毎年PCを買替えているくらい好きだから、人のことは言えないんだけど・・・。そういうお客様がたくさんいらっしゃると会社が潤って嬉しいけれど、すごくニッチな、需要の先端のとがったところですね。それでもKOUZIROをかわいがってくれているお客様は、そんな玄人なお客様も多いわけで、これからも何卒よろしくお願いいたします。





dmatsu2005 at 20:36コメント(0)トラックバック(0) 
Frontier | 雑談

2007年07月30日

ウコンの力

今日の夕食は周南市(旧:徳山市)で、焼き鳥を食べました。とかいうと、焼き鳥の写真が貼ってあったりするんですよね。

違います。お酒を飲んだ後は、いつも「ウコンの力」を飲むようにしています。

ウコンの力あんまり、良く撮れていない写真でごめんなさい。
でも、ウコンの力を飲むと翌朝の目覚めが違うんですよね。ただ、アルコールを分解するには「水分」が必要だって事を痛感させられるくらい、肝臓が働いていて、ものすごく喉が渇いた状態で目が覚めます。

カレーを食べてもいいらしいですよ。でも、飲んだ後にラーメンっていうのは分ると思うんだけど、なかなかカレーにはならないんだよなぁ。炭水化物が欲しいって気持ちにはなるんだけども。

居酒屋で「飲んだ後にはコレ!」とか書いて、カレーライスがあってもいいとおもうんだけど、っていうか、ウコンの力が置いてあればいいんだよな、と思う今日この頃です。




dmatsu2005 at 23:53コメント(0)トラックバック(0) 
雑談 

2007年07月29日

【講座006】壁の跳ね返り

UpdateSpriteメソッドの前回の続きをみていきましょう。

int MaxX = graphics.GraphicsDevice.Viewport.Width
  - myTexture.Width;

int MinX = 0;
int MaxY = graphics.GraphicsDevice.Viewport.Height
  - myTexture.Height;

int MinY = 0;


図で理解した方がいいので、下図をみてください。

WindowSize







スプライトを表示する際には、スプライトの左上の座標を使うのですが、その最小値、最大値を、それぞれ(MinX, MinY)と(MaxX, MaxY)で表しています。

左上が(0,0)であることは、もういいとして、それを(MinX, MinY)に入れているのはわかると思います。右下の最大値の方をどうやって求めているか、ということが重要です。

ウィンドウの幅は、graphics.GraphicsDevice.Viewport.Widthで得られ、
ウィンドウの高さは、graphics.GraphicsDevice.Viewport.Heightで得られます。
そこから、スプライトの幅・高さ(myTexture.Width・myTexture.Height)をそれぞれ引いたところを(MaxX, MaxY)としているわけですね。

さて、続いて、if〜else if構文が2つ続きます。これはC#の書き方ですが、他の言語でも似たような書き方をよくします。プログラムでは非常に一般的なので、ちょっと勉強しましょう。

if (条件1)
{
  処理1
}
else if (条件2)
{
  処理2
}

となっているのですが、「条件1が満たされていれば(真だったら、とか、Trueだったら、という言い方をすることもあります。)、処理1を行います。もし、条件1が満たされていなかったら(偽だったら、とか、Falseだったら、といったりします。)、条件2を判断し、条件2が満たされていたら、処理2を行います。」という構文です。
この構文のポイントは、「処理1と処理2が同時に実行されることはなく、かつ、どちらも実行されないこともある」ということです。

さて、実際には何が書かれているのでしょうか。1つ目のif〜else if構文を見てみましょう。

if (spritePosition.X > MaxX)
{
  spriteSpeed.X *= -1;
  spritePosition.X = MaxX;
}
else if (spritePosition.X < MinX)
{
  spriteSpeed.X *= -1;
  spritePosition.X = MinX;
}

条件1は「spritePosition.X > MaxX」ですね。これは、「スプライトが右の壁をこえてしまったか?」を意味します。前回の講座でやりましたが、すでにspritePositionには、動く量が加えられていることに注意してください。
もし、スプライトが右の壁を越えてしまっていたら、スプライトのスピードは左右反転(この場合は右→左になるわけですが)しろ、となっています。これは、

spriteSpeed.X *= -1;

がそれを意味していますが、前回の+=と、同様に

x *= a;

と書かれていると、x に a を掛ける、ということを意味していますから、spriteSpeed.X に -1 が掛けられるということになります。より、具体的には、spriteSpeed.X が右の壁を越えてしまうときには、50.0が入っていたはずですから、spriteSpeed.X は -50.0 が入れられたのと同じことになります。

そして、右の壁を越えてしまってはいけませんから、

  spritePosition.X = MaxX;

として、スプライトの位置を壁にぶつかった状態にしてしまいます。

続いて、条件1が満たされていなかったときには、条件2を判断します。条件2は「spritePosition.X < MinX」です。これは「左の壁を越えてしまったか?」を判断しています。これが満たされていた場合には、またスピードを左右逆転(今回の場合は、左→右への反転)して、スプライトの位置を左の壁にぶつかった状態にしています。

いかがでしょうか?同様のことがY軸方向でも行われます。

if (spritePosition.Y > MaxY)
{
  spriteSpeed.Y *= -1;
  spritePosition.Y = MaxY;
}
else if (spritePosition.Y < MinY)
{
  spriteSpeed.Y *= -1;
  spritePosition.Y = MinY;
}

こちらもX軸と同様ですから、同じように考えてみてください。ウィンドウの枠を壁に見立てて、スプライトが跳ね返る、という処理を行っていることがわかります。

これで、このサンプルの解説は終わりになりますが、ちょっと時間をもらって、その後、いくつか改造をしてみたいと思います。


dmatsu2005 at 07:31コメント(0)トラックバック(0) 
プログラミング講座 | テクニック

2007年07月28日

【講座005】スプライトの速度

Updateメソッドに書き加えられたのは、次の1行でした。

UpdateSprite(gameTime);

これは、UpdateSpriteメソッドを実行する、ということを意味していますが、構造化プログラミング(って懐かしい言葉だな)では、できるかぎり大雑把にプログラムの構造を理解できるように、こうやって、詳細処理は別に書く、ということを行います。

ですから、実処理はUpdateSpriteに書かれているわけですね。そういうわけで、UpdateSpriteメソッドを見ていくわけですが、今回はスプライトを動かしている式を見てみます。たった、1行の解説ですが、XNAのゲームプログラミングでは重要なポイントになるはずです。

UpdateSpriteメソッドの最初の1行は次のようなものでした。

spritePosition += spriteSpeed *
  (float)gameTime.ElapsedGameTime.TotalSeconds;

ここで、C#の文法を勉強しましょう。

x += a;

と書かれている場合には、xにはaが加えられます。

y -= b;

と書かれている場合には、yからはbが引かれます。これと同義の文は、

y += -b;

ということになります。たとえば、

x += 10;

であれば、xには10が加えられるし、

y += -3.7;

であれば、yには-3.7が加えられる、すなわち、yから3.7が引かれます。ということは、先の文を解釈すると、
「spritePositionに、spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSecondsが加えられる」となるわけです。

spritePositionには初期値(0, 0)が設定されていて、Drawメソッドで、この位置にスプライトが描画されることを意味していました。このspritePositionに下線の部分の計算結果が足され、スプライトの場所が変わっていくことを意味しています。

ところで、spriteSpeedは(50.0, 50.0)を入れてありました。その先の(float)gameTime.ElapsedGameTime.TotalSecondsってなんでしょうか?それを理解しなければなりません。そこで、このElapsedGameTimeにカーソルを合わせて、[F1]でHelpを呼んでみます。

Help GameTime






gameTime.ElapsedGameTime は最後にUpdateが実行されたときから、これまでに経過した時間を意味しているようです。で、ついでに言うと、TimeSpan構造体なので、そのプロパティに、TotalSecondsってのがありまして、秒の単位で値を返してくれるわけですから、「gameTime.ElapsedGameTime.TotalSecondsは、最後のUpdateからどのくらい経過したかを表している(秒単位)」となります。
また、TotalSecondsはdouble型で定義されています。speedSpriteのVector2クラスのメンバーは、float型なので、型がそろっていないと掛け算がうまくいかないことがあります。このため、(float)というのを付けて、speedSpriteと掛け算を行っているわけですね。

これは何を意味しているのでしょうか?実は、speedSpriteっていうスプライトの動くスピードを表している変数は、「秒速」を意味していた、ということになります。ですから、前回のUpdateから、今回のUpdateまでの経過時間を速度に掛け算することで、スプライトを動かす量(ピクセル数)を求めた、ということになります。

ゲームプログラミングにおいては、キャラクタをどのくらいのスピードで動かすのか、というのは非常に重要な問題です。昔、BASICでゲームを作ったことがある方ならば、

for t = 0 to 100: Next t

などという構文を挟んで、キャラクタの動かすスピードを調整したことがあるのではないでしょうか。こういった無駄なループを回して、時間調節を行うテクニックがあったのですが、コンピュータの性能が格段に上がった現在、このような方法を使うことは無意味です。そこで、算数の時間に習った

(距離)=(時間)×(速度)

を使って、動かすスピードを求めていく手法が現在では一般的です。

UpdateSpriteメソッドは、もう少し続きます。このまま、単に足すだけですと、ウインドウの外にスプライトが出てしまいますから、ウィンドウの枠が壁となって跳ね返るアルゴリズムが必要になってくるわけですね。それを次回に見ていきましょう。


dmatsu2005 at 04:17コメント(0)トラックバック(0) 
プログラミング講座 | テクニック

2007年07月27日

【講座004】書き加えたコードの意味

まず、最初に加えたインスタンス変数たちを紹介します。

Texture2D myTexture;
SpriteBatch spriteBatch;
Vector2 spritePosition = Vector2.Zero;
Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);

はじめに、Texure2Dというクラスは何か、ということを説明します。このクラスは、グラフィックチップが読み書きできる平面グリッド、を意味していまして、簡単に言うと、画面の上に貼る透明な板だと思った方がいいです。
昔々にMSXとか、ファミコンベーシックでプログラムを組んだことがある方はSPRITE関数なんてのがあって、背景画像の上にスプライトでキャラクタを動かして、あれやこれやと、ゲームを作ったりしていたと思うのですが、サイズが自由に設定できる透明な板(スプライト)と考えるのが、理解しやすいと思います。
で、このクラスへのインスタンス変数をmyTextureという名前にしたわけですが、お気づきの方もいらっしゃると思いますが、複数の絵を動かしたい場合などには、このインスタンス変数を必要な分だけ定義しなければならない、ということですね。

プログラムの中を読み取るときには、先に一気に読み取ってしまった方がわかりやすいときもあるので、このmyTextureが、どう使われているのか、もうちょっと見てみましょう。

LoadGraphicsContentメソッドの中では、絵を読み込ましています。

myTexture = content.Load<Texture2D>("face");

という形ですね。この、content.Loadというのは、右側のソリューションエクスプローラで一覧されている、様々なデータと、ひも付けを行うメソッドです。ですから、今回はTexture2Dクラスのデータを読み込むよ、ってことで<>内に、Texture2Dと書いてありまして、その後、ファイル名(拡張子無し)を設定します。

Drawメソッドの中では、実際に絵を描くのに、次のようなコードを使っています。

spriteBatch.Draw(myTexture, spritePosition, Color.White);

このような形で使われるわけです。

さて、次は、SpriteBatchです。これは、GraphicsDeviceへスプライトのグループを描画し表示させるクラスです。習うより慣れろってこともありますから、このクラスについては、今は「おまじない」だと思って使っていた方がいいでしょう。後の回で、いろいろと実験をしてみたいと思います。
ちなみに、このインスタンス変数 spriteBatchは、LoadGraphicsContentメソッドの中で、

spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

とgraphics.GraphicsDeviceとのやりとりでインスタンスを作るときに使われ、Drawメソッドの中で、

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
spriteBatch.Draw(myTexture, spritePosition, Color.White);
spriteBatch.End();

と使われて、さっきのmyTextureを使って、絵を描いています。ここのspritePositionというのは、どこに表示するのか、を意味していますが、
spritePositionとspriteSpeedは、Vector2の変数として宣言されています。
2次元の座標を表すのに、このクラスを用いるのがC#っぽいところ。C言語などでも構造体とかで、座標を表したりもしましたので、プログラミングをやっている人にはわかりやすいかも。ところで、2次元の座標はX軸とY軸でできていて、画面の左上が(X,Y)=(0,0)で、右に行くほどXの値が大きくなり、下に行くほどYの値がおおきくなります。

2次元の座標系





そこで、spritePositionには当初(0,0)を設定し、spriteSpeedには当初(50.0, 50.0)を設定する、と書かれています。「50.0f」っていう風に最後に「f」が付いていない?と思われるかもしれません。これは、この「50.0」という値がfloat型なんだよってことを意味しています。単に「50.0」と書いてビルドしてみるとわかりますが、50.0と表示すると、それはdouble型であることになってしまい、ビルドエラーになってしまいます。
なんだか、よく分らない気持ちになるかもしれません。こういうところで、よく分らないからプログラム嫌いってなっちゃう人も多くて、すごく残念なんですが、私ははっきりと言い切っておきます。「こんなこと、気にせず先に進んでください」と。いろいろな本で「型」の考え方が大切だ、とかいろいろ書いてあるかもしれませんが、それが理解できるようになるのは、結構先ですし、ある種、専門的にコンピュータ数値解析のことをやらないとわかりません。いろいろなプログラミング言語で特徴がありますが、C#(C言語系,Javaも)特有の問題ですから、深く悩まず、こういうエラーにぶつかったら、「あ、f、付け忘れちゃった」くらいの気持ちで進んでください。

今回も長くなってきたので、これでおしまい。次回は、動かしている部分のコードを読み取っていきましょう。

dmatsu2005 at 07:25コメント(0)トラックバック(0) 
プログラミング講座 | XNA

2007年07月26日

【講座003】貼った絵を動かしてみる

今日は、Help「Your First Game: Microsoft XNA Game Studio Express in 2D」のStep 5に進んでみます。

予告したとおり、Step 5は貼った絵を動かすプログラムです。
今回は「Update」のところに、まず次の「赤字」の部分を加えます。

protected override void Update(GameTime gameTime)
{
  // Allows the game to exit
  if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    this.Exit();

  // TODO: Add your update logic here

  UpdateSprite(gameTime);

  base.Update(gameTime);
}

このUpdateSpriteというのは、自分で作るメソッドです。ですので、今度は、このメソッドを足さなければなりません。「Draw」の下に書き加えましょう。あくまで書き加えるところが「赤字」ですよ。

protected override void Draw(GameTime gameTime)
{
  graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

  // TODO: Add your drawing code here

  spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
  spriteBatch.Draw(myTexture, spritePosition, Color.White);
  spriteBatch.End();

  base.Draw(gameTime);

}

void UpdateSprite(GameTime gameTime)
{
  // Move the sprite by speed, scaled by elapsed time.
  spritePosition += spriteSpeed *
    (float)gameTime.ElapsedGameTime.TotalSeconds;


  int MaxX = graphics.GraphicsDevice.Viewport.Width -
    myTexture.Width;

  int MinX = 0;
  int MaxY = graphics.GraphicsDevice.Viewport.Height -
    myTexture.Height;

  int MinY = 0;

  // Check for bounce.
  if (spritePosition.X > MaxX)
  {
    spriteSpeed.X *= -1;
    spritePosition.X = MaxX;
  }

  else if (spritePosition.X < MinX)
  {
    spriteSpeed.X *= -1;
    spritePosition.X = MinX;
  }

  if (spritePosition.Y > MaxY)
  {
    spriteSpeed.Y *= -1;
    spritePosition.Y = MaxY;
  }

  else if (spritePosition.Y < MinY)
  {
    spriteSpeed.Y *= -1;
    spritePosition.Y = MinY;
  }
}

これでOKです。さて、どうなるでしょうか? いつも[F5]なので、本来のビルドの仕方、[F6]を押しましょう。これでビルドが行われて、「ビルド正常終了」となったら、[F5]で実行(本当はデバッグ開始)です。

動く絵








動き始めましたよね。Step 6は、この先はいろいろな改造方法があるよっていう話が書かれていますので、ここでは直接内容には触れませんが、実際、これを使って、いろいろとやってみたいなぁと考えています。

次回は、とりあえず、改造する前に、それぞれのプログラムコードが、何を意味しているのか、詳細に分析して行こうと思います。


dmatsu2005 at 05:04コメント(0)トラックバック(0) 
プログラミング講座 | XNA

2007年07月25日

【講座002】スプライトを動かす

では、昨日に続いて、Helpに書いてあった先に進んでみたいと思います。

英語の和約ばかりしていても仕方がないので、要約します。

Step 4

まず、小さな画像ファイル(.bmp でも .jpg でも、.png でもいいけど)を用意しましょう。あとで、これが動きますので、だいたい100×100ピクセルサイズから、300×300ピクセルサイズの間がいいでしょうね。別に正方形でなくてもかまいません。
僕は、こんな絵をペイントで書きました。ファイル名は「face.png」です。

へのへのもへじ







そのあと、Visual C#の画面の右側にある、「ソリューションエクスプローラ」のところで、右クリックして、[追加]→[既存の項目]を選択します。

ソリューションエクスプローラ










そうすると、「既存項目の追加」というファイル選択ウィンドウが開きます。最初に一番下の「ファイルの種類」を「すべてのファイル (*.*)」にしてしまった方が便利かもしれません。なぜだかよく分りませんが、JPEG画像は.jpeが拡張子に設定されているみたいで、非常に使いづらいので。

既存項目の追加





僕はここで、ペイントでさっき作った「face.png」を選択しました。
これで、Visual C#のこのプロジェクトで、この画像ファイルを利用できるようになりました。

そうしたら、プログラムを書いていきましょう。

public class Game1 : Microsoft.Xna.Framework.Game
{
  GraphicsDeviceManager graphics;
  ContentManager content;

  public Game1()
  {
    graphics = new GraphicsDeviceManager(this);
    content = new ContentManager(Services);
  }

と書かれている部分があります。この、「ContentManager content;」と、「public Game1()」の間に次の項目を入れます。

  Texture2D myTexture;
  SpriteBatch spriteBatch;
  Vector2 spritePosition = Vector2.Zero;
  Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);

あとで、詳しい説明をすることにして、とりあえず先に進みます。
今度は、さっき折りたたんだ中で、「LoadGraphicsContent」のところを開きなおして、中身を次のようにします。ちなみに書き加えるところは「赤く」しておきました。

protected override void LoadGraphicsContent(bool loadAllContent)
{
  if (loadAllContent)
  {
    // TODO: Load any ResourceManagementMode.Automatic content
    myTexture = content.Load<Texture2D>("face");
    spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
  }

  // TODO: Load any ResourceManagementMode.Manual content
}

ちなみに、この中で、「face」と書かれたところがあります。僕は、さっきペイントで「face.png」というのを作って、ソリューションエクスプローラに入れたわけですが、この拡張子の部分を取って、「face」となっています。作った画像が「body.jpg」であれば、ここは「body」になりますし、「ball.bmp」であれば、「ball」になります。

さて、この後は、折りたたまれた「Draw」を書き換えます。さっきと同じように書き加えるところは「赤字」にしています。

protected override void Draw(GameTime gameTime)
{
  graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

  // TODO: Add your drawing code here

  spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
  spriteBatch.Draw(myTexture, spritePosition, Color.White);
  spriteBatch.End();

  base.Draw(gameTime);
}

さぁ、これで、もう実行は可能です。[F5]キーを押して、ビルド&実行をしてみましょう。

Step4終了後








左上の方に、さっき作った画像が貼られています。とりあえず、Step 4では、ここまでです。終わりにする時にはウィンドウ右上の×ボタンを押しましょう。(XBOXのゲームパッドがUSBで接続されているときは、Backボタンを押してもプログラムは終了します。)

今日のところはここまで。次は、当然ながら、この絵を動かすってことをやってみたいと思います。


dmatsu2005 at 08:14コメント(0)トラックバック(0) 
プログラミング講座 | XNA

2007年07月24日

【講座001】 まず新規プロジェクトを作ってみよう

やっと今日から始まるプログラミング講座!ということで、ゲーム作りを進めていきたいと思います。ゲームを作るにもXNAってのがどういうものなのか? Visual C#ってなんだろう?ってことから始まってしまうので、いろいろと触ってみたいと思います。

何はともあれ、 Visual C#でゲームを作る、というか、ソフトウェアを作るためにいちばん最初に行うのは、「プロジェクトを作成する」ってことになります。プロジェクトっての は、1つの実行可能形式のEXEファイルを作るため(DLLっていう形式のファイルを作るのが目的だったりすることもあるけれど)の単位でして、それを作 らなければなりません。
ただ、からっぽのプロジェクトってのを作ってしまうと、一からいろいろなものを作らなければなりませんが、 XNAをインストールしているので、「ひな形(テンプレート)」ってもので、「ゲーム」の基本パッケージってのが入っています。これをベースにして、ゲー ムを作っていくことにします。

新規プロジェクト





Visual C#を起動して、[ファイル]-[新しいプロジェクト]を選びます。

新規プロジェクト 2








で、テンプレートの中の「Windows Game」を選びます。となりに「Windows Game Library」ってのもあるので間違えないようにしましょう。プロジェクト名は「TestProject」と入力しましたが、別に好きな名前で構いませ ん。
そうすると、ちょっとHDDが動いて、Gameのプロジェクトができあがります。タブには「Game1.cs」ってのが表示され ていると思いますが、この中身をざっくり見るために、左側の□をクリックして、ちょっと概観を見てみたいと思います。

折りたたんでみる






「/// <summary>」ってなっているところと「protected override...」ってなっているところをまとめていくと、次のような状況になります。

全体像







画面では見づらいですから、まとめると、このGameというClass(Classっての が、まだ、何かよくわからなくてもいいです)には、
  • Initialize
  • LoadGraphicsContent
  • UnloadGraphicsContent
  • Update
  • Draw
って のが入っているんだな、ということがわかります。でも、それが何を意味しているのか、よく分りませんから、Helpを使ってみるといいわけです。Help は、知りたい言葉の上で[F1]キーを押せば立ち上がります。
いちばん最初の時には、「WebのHelpを使いますか?」みたいなこ とを聞かれますが、情報が一番早く集まるので、Webと連動したHelpを使った方がいいわけですから、「Webも一緒にしらべる」オプションを選びま しょう。
で、立ちあがると、こんな画面です。

Helpを使う







「やっぱり英語か・・・。」みたいな気持ちになるかもしれませんね。
ただ、左側の上の方にプルダウンメニューが付いていますが、この中の「Visual C# Express Edition」を選んで、その下のメニューの中をいくつかクリックしてみると「Visual C#」の項目は、日本語化されているのが多いことも分かります。お目当ての「XNA Game Studio Express」が英語のままなのが辛いんだな・・・と。
マイクロソフトさん、日本のゲームプログラマー増やすなら、早く日本語化し てくれ!とお願いしたくもなるわけですが、しょうがないので、英語のまま、読んでいきます。

そうすると、 「Your First Game: Microsoft XNA Game Studio Express in 2D」(はじめてのゲーム: Microsoft XNA Game Studio Express in 2D)という項目を見つけました。「This article leads you through the steps necessary to create a simple sprite-based game by using XNA Game Studio Express. 」(この項目は、XNA GSEを使って、簡単なスプライトベースのゲームを作るのに必要なステップを紹介しています。)と書かれています。
そのあとのStep2までが、さっきまでやったことと同じで、Step3には、

If you build and run your game now, the GraphicsDeviceManager will handle setting up your screen size and rendering a blank screen. Your game will run and update all by itself. It's up to you to insert your own code to make the game more interesting. (これで、ビルドと実行をすると、GraphicsDeviceManagerってのが、ス クリーンサイズを認識して、からっぽの空間を描くでしょう。この空っぽの空間にゲームが動いていきます。あとはゲームを面白くしていくのは、コードを追加 していくあなた次第です。)

Much of the code to start and run your game has already been written for you, and all have places for you to insert your code.(もうすでにあなたのために、ゲームをスタートし、動かすためのコードが書かれていますか ら、あなたは、そこにコードを挿入していけばいいんです。)

  • The Initialize method is where you can initialize any assets that do not require a GraphicsDevice to be initialized.(Initialize メソッドは、GraphicsDevice以外の他のいろいろな初期化を行うところです。)
  • The LoadGraphicsContent method is where you load any graphical assets such as models and textures.(LoadGraphicsContent メソッドは、モデルやテクスチャなどのグラフィックについて読み込むところです。)
  • The UnloadGraphicsContent method is where any graphical assets can be released. Generally, no extra code is required here, as assets will be released automatically when they are no longer needed.(UnloadGraphicsContent メソッドは、グラフィックが解放されるときに実行されます、普通、使わなくなると、自動的に開放されるので、特に何かを書く必要はありません。)
  • The Update loop is the best place to update your game logic: move objects around, take player input, decide the outcome of collisions between objects, and so on.(Update ループは、ゲームロジックの更新に使うのに最も適した場所です。たとえば、何かが動きまわるとか、プレイヤーの入力を受け取ったり、物と物が衝突したとき にどういう結果を決めるとか、そういうことを書き入れます。)
  • The Draw loop is the best place to render all of your objects and backgrounds on the screen.(Draw ループは、画面に物や背景を実際に書き入れる場所です。)
と書かれています。これで、Game Classというものの概観がわかりました。簡単にいえば、InitializeとLoadGraphicsContentでゲームの初期化や画像の読み込みなどを行っておいて、Updateで実際のゲームの計算や処理を行って、Drawで画面に書き込むということをしていくんだ、というわけですね。(UnloadGraphicsContentはこれといって何かを書く必要はないみたい)

明日は、この先のサンプルプログラムを作ってみましょう。
 

dmatsu2005 at 14:57コメント(0)トラックバック(0) 
プログラミング講座 | XNA

2007年07月23日

カクテル

今日は、っていうか、今夜はカクテルを飲みにきています。 大好きなマルガリータは飲んでしまったので、テキーラサンライズの写真を付けておきましょう。テキーラベースばっかりですが。

テキーラサンライズ















バーなので、話題が飛びまくっていますが、さっきはラフロイグの話です。アイリッシュウィスキーで、クレオソートの香りがします。嫌いな人は本当に嫌いで、全く受け付けないみたいですが、僕はたまに飲みたくなる酒です。
ま、バランタインが普通飲むウィスキーですけどね。 とりあえずカクテル大好きなので、テキーラサンライズ飲みます。それでは!

dmatsu2005 at 23:06コメント(0)トラックバック(1) 
雑談 

2007年07月22日

ただいま、ゲーム制作中です

今日は日曜日なので、会社はお休み。ただ、現在、僕の大切な方が二人も入院中でして、そのお見舞いに行ってきました。どちらの方も早く良くなってほしいです。一人は僕の祖母でして、明日手術ということもあり、ちょっと長めにいました。
入院歴というか、僕も人生の中では、過去5回入院しているのかな?、多い方だと思うのです。お見舞いを受ける方の立場から言うと、来てもらえると嬉しいのだけど、1回同時に15人くらい来たことがありまして大変でした。長いと疲れちゃうし、早めに切り上げた方がいいよなって自分がお見舞いに行く時には思っていたりします。
それでも、久しぶりにゆっくりと時間の取れるお休みでしたから、いつまでもプログラミング講座が始められないのでは仕方がないので、いろいろと仕込みをしておりました。スモールステップで一つ一つやったことが確認できるような作り方を工夫しているのですが、なかなかVisual C#での操作方法を説明しながらは、大変かもとか考えながら、仕込みをしています。
基本的に絵ごころがないので、ペイントで作った適当な絵を貼ったりして、自分の絵にがっかりしながら作っていますが、まぁこれは、講座中では自分で作ってね、ってことになる予定ですので、今から準備をされている方は「コンピューターを擬人化したキャラクタ」ってのをイメージしておいてください。
ペイントで作るとは言いましたが、自分でお使いの絵を描くソフトがあれば、それを使ってもらっても構いませんが、基本的には「できるかぎりお金をかけない」で、できるようにしたいと思っていますので、あしからずご了承ください。別にデジカメで撮った写真をつかってもいいわけですから、それでもいいかもしれませんし。
というわけで、今週スタートするぞ

dmatsu2005 at 23:38コメント(0)トラックバック(0) 
ゲーム | XNA
livedoor プロフィール
広告

レンタルサーバーなら使えるねっと


Google AdSense
Google検索
訪問者数

オススメの書籍