タイマーでスプライトをリアルタイムに動かす (4/5)
作成:2009-12-30 10:09
更新:2009-12-30 10:09
更新:2009-12-30 10:09
■スプライトとスプライトセット
1つのイメージを動かすだけなら、このようにタイマーを使って位置のデータを書き換えながら動かしていけばよいでしょう。が、複数のイメージを同時に動かすようになると、データの管理もなかなか面倒になります。
更には、特にゲームなどの場合、「衝突判定」というのも必要となることがあります。動かしている2つのイメージが衝突(接触)したかどうか、というようなことをチェックして処理をすることですね。こうなるとますます処理は面倒になってきます。
こうした「多数のイメージの表示を管理する」という場合、一つ一つ独自に配列などで管理するより、もっと便利なものがあります。それは「スプライト」と「スプライトセット」です。
スプライトというのは、表示するイメージや位置などの情報をひとまとめにして管理する「Sprite」というクラスです。またスプライトセットは、複数のSpriteインスタンスをまとめて管理するもので「SpriteSet」というクラスになります。これらを使うことで、複数の表示イメージの管理がしやすくなります。これらの基本的なメソッドを以下に整理しておきます。
Spriteの使い方は比較的簡単です。インスタンスの作成は、表示するImageを引数に指定して行います。後は、現在の位置を調べたり変更したりする方法さえわかれば、それだけで十分使うことができるでしょう。
SpriteSetは、管理するSpriteを配列としてまとめたものを引数に渡してインスタンスを作成します。このSpriteSetの特徴は、衝突判定を標準で持っている点です。これは、まずsetCollisionAllを呼び出して、現在のSprite配列の位置情報から衝突情報を更新します。そしてisCollisionを使い、Sprite配列の2つの要素の番号を引数に指定して、その2つが衝突しているかどうかを調べます。
両者の基本的な仕組みさえわかれば、スプライトを使うのはそう難しくはありません。まずは、以下にあげたメソッドの使い方をしっかり頭に入れましょう。
更には、特にゲームなどの場合、「衝突判定」というのも必要となることがあります。動かしている2つのイメージが衝突(接触)したかどうか、というようなことをチェックして処理をすることですね。こうなるとますます処理は面倒になってきます。
こうした「多数のイメージの表示を管理する」という場合、一つ一つ独自に配列などで管理するより、もっと便利なものがあります。それは「スプライト」と「スプライトセット」です。
スプライトというのは、表示するイメージや位置などの情報をひとまとめにして管理する「Sprite」というクラスです。またスプライトセットは、複数のSpriteインスタンスをまとめて管理するもので「SpriteSet」というクラスになります。これらを使うことで、複数の表示イメージの管理がしやすくなります。これらの基本的なメソッドを以下に整理しておきます。
Spriteの使い方は比較的簡単です。インスタンスの作成は、表示するImageを引数に指定して行います。後は、現在の位置を調べたり変更したりする方法さえわかれば、それだけで十分使うことができるでしょう。
SpriteSetは、管理するSpriteを配列としてまとめたものを引数に渡してインスタンスを作成します。このSpriteSetの特徴は、衝突判定を標準で持っている点です。これは、まずsetCollisionAllを呼び出して、現在のSprite配列の位置情報から衝突情報を更新します。そしてisCollisionを使い、Sprite配列の2つの要素の番号を引数に指定して、その2つが衝突しているかどうかを調べます。
両者の基本的な仕組みさえわかれば、スプライトを使うのはそう難しくはありません。まずは、以下にあげたメソッドの使い方をしっかり頭に入れましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
・Spriteの作成 Sprite 変数 = new Sprite( [Image] ); ・Spriteの位置を取得 int 変数 = [Sprite].getX(); int 変数 = [Sprite].getY(); ・Spriteの位置の設定 [Sprite].setLocation( 横位置 , 縦位置 ); ・SpriteSetの作成 SpriteSet 変数 = new SpriteSet( [Sprite配列] ); ・衝突情報の更新 [SpriteSet].setCollisionAll(); ・衝突のチェック boolean 変数 = [SpriteSet].isCollision( 番号1 , 番号2 );
※関連コンテンツ