Javaプログラミング/サーバサイド&ケータイJava

スプライトでキャラクタを操作しよう(3ページ目)

iアプリでゲームのキャラクタなどを操作するのに必須な「スプライト」を使ってみましょう。

執筆者:掌田 津耶乃

Spriteの衝突判定


では、スプライトどうしが接触しているかどうかのチェックはどのようにすればよいのでしょうか。いわゆる「衝突判定」というやつですね。

衝突判定は、SpriteSetに用意されているメソッドを使って行います。これも、実際に簡単なサンプルを動かしてみましょう。

import com.nttdocomo.ui.*;

public class SampleIApp extends IApplication {

  public void start() {
    Display.setCurrent((Frame)(new MainCanvas()));
  }

}

class MainCanvas extends Canvas {
  Image charImg;
  Sprite[] sprites;
  SpriteSet set;

  MainCanvas() {
    setSoftLabel(SOFT_KEY_1, "END");
    setBackground(Graphics.getColorOfName(Graphics.WHITE));
    try {
      MediaImage mi = MediaManager.getImage("resource:///char.gif");
      mi.use();
      charImg = mi.getImage();
      sprites = new Sprite[5];
      for(int i = 0;i < 5;i++){
        sprites[i] = new Sprite(charImg);
      }
      int dx = this.getWidth() - charImg.getWidth();
      int dy = this.getHeight() - charImg.getHeight();
      sprites[0].setLocation(dx / 2,dy / 2);
      sprites[1].setLocation(10,10);
      sprites[2].setLocation(10,dy - 10);
      sprites[3].setLocation(dx - 10,10);
      sprites[4].setLocation(dx - 10,dy - 10);
      set = new SpriteSet(sprites);
    }catch(Exception e){}
  }

  public void paint(Graphics g) {
    g.lock();
    g.clearRect(0, 0, Display.getWidth(), Display.getHeight());
    g.drawSpriteSet(set);
    g.unlock(true);
  }

  public void processEvent(int type, int param) {
    switch(type){
    case Display.KEY_RELEASED_EVENT:
      int x = sprites[0].getX();
      int y = sprites[0].getY();
      switch(param){
      case Display.KEY_SOFT1:
        (IApplication.getCurrentApp()).terminate();
        break;
      case Display.KEY_UP:
        sprites[0].setLocation(x,y - 10);
        break;
      case Display.KEY_DOWN:
        sprites[0].setLocation(x,y + 10);
        break;
      case Display.KEY_LEFT:
        sprites[0].setLocation(x - 10,y);
        break;
      case Display.KEY_RIGHT:
        sprites[0].setLocation(x + 10,y);
        break;
      }
      checkCollision();
      repaint();
    }
  }
  
  public void checkCollision(){
    set.setCollisionAll();
    for(int i = 1;i < 5;i++){
      if (set.isCollision(0,i)){
        sprites[i] = null;
      }
    }
  }

}
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます