15. キーボードæ“作ã¨å†å®Ÿè¡Œ



ODE (Open Dynamics Engine) åˆç´šè¬›åº§ã®ç¬¬ï¼‘5回目ã§ã™ã€‚

今回ã¯ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ã«ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã™ã‚‹æ–¹æ³•ã‚’å­¦ã³ã¾ã™ã€‚ODEã§ã¯ï¼Œã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ä¸­ã«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®å…¥åŠ›ã‚’å—付ã‘ã¾ã™ã®ã§ï¼Œå…¥åŠ›ã™ã‚‹ã‚­ãƒ¼ã«å¯¾å¿œã™ã‚‹é–¢æ•°ãªã©ã‚’作æˆã™ã‚‹ã¨ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªã‚·ãƒŸãƒ¥ レーションãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ï¼Žï¼¯ï¼¤ï¼¥ã‚‚ブログもインタラクティブãªã¨ã“ã‚ãŒé­…力ã®ä¸€ã¤ã§ã™ã­ï¼Ž

キーボードæ“作

以下ã«é‡è¦ãªéƒ¨åˆ†ã ã‘ソースコードを示ã—ã¾ã™ï¼Žã“ã®ãƒ—ログラムã¯sample9を変更ã—,ボールã®ä»–ã«å††æŸ±ã‚ªãƒ–ジェクトを表示ã—ã¦ï¼Œã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®å…¥åŠ›ã«ã‚ˆã‚Šå¤–力を加ãˆãŸã‚Šï¼Œã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®å†ã‚¹ã‚¿ãƒ¼ãƒˆã‚’å¯èƒ½ã¨ã—ã¦ã„ã¾ã™ï¼Ž


/*** æç”»ã®æº–備 ***/
void  prepDrawStuff()
{
  fn.version = DS_VERSION;
  fn.start   = &start;
  fn.step    = &simLoop;
  fn.command = &command; // キー入力ã§å‘¼ã³å‡ºã•れる関数ã®ã‚¢ãƒ‰ãƒ¬ã‚¹
  fn.stop    = NULL;
  fn.path_to_textures = "../../drawstuff/textures";
}

/** * キー入力ã§å‘¼ã³å‡ºã•れる関数 ***/
void command(int cmd)
{
  switch (cmd) {
    case ’s’: dBodyAddForce(pillar.body,50, 0, 0);break; // sã‚­ãƒ¼ãŒæŠ¼ã•れãŸã‚‰ã¨ãã®å‡¦ç†
    case ‘j’: dBodyAddForce(ball.body ,0,-10, 0);break; // jã‚­ãƒ¼ãŒæŠ¼ã•れãŸã‚‰ã¨ãã®å‡¦ç†
    case ‘k’: dBodyAddForce(ball.body,0,  0,50);break; // kã‚­ãƒ¼ãŒæŠ¼ã•れãŸã‚‰ã¨ãã®å‡¦ç†
    case ‘l’: dBodyAddForce(ball.body,0, 10, 0);break; // lã‚­ãƒ¼ãŒæŠ¼ã•れãŸã‚‰ã¨ãã®å‡¦ç†
    case ‘r’:restart();break;   // ï½’ã‚­ãƒ¼ãŒæŠ¼ã•れãŸã‚‰ã¨ãã®å‡¦ç†
  }
}

/***  シミュレーションをå†ã‚¹ã‚¿ãƒ¼ãƒˆ ***/
void restart()
{
  // 破壊
  dJointGroupDestroy(contactgroup); // 接触点ã®ã‚°ãƒ«ãƒ¼ãƒ—を破壊
  destroyBall();   // ボールを破壊
  destroyCylinder(); // 円柱を破壊

  // 生æˆ
  contactgroup = dJointGroupCreate(0); //接触点グループã®ç”Ÿæˆ
  createBall();   // ボールã®ç”Ÿæˆ
  createPillar();  // 円柱ã®ç”Ÿæˆ
}

/*** ボールã®ç ´å£Š ***/
void destroyBall()
 {
  dBodyDestroy(ball.body);
  dGeomDestroy(ball.geom);
}

void destroyCylinder()
{
  dBodyDestroy(pillar.body);
  dGeomDestroy(pillar.geom);
}

static void simLoop (int pause)
{
  // キーボードã‹ã‚‰controlキーを押ã—ãªãŒã‚‰ï½ã‚­ãƒ¼ã‚’押ã™ã¨
  // シミュレーションãŒä¸€æ™‚åœæ­¢ã™ã‚‹
  if (!pause) {
    dSpaceCollide(space,0,&nearCallback);
    dWorldStep(world,0.01);
    dJointGroupEmpty(contactgroup);
  }
  drawObject(ball.geom,1.3,0,0);
  drawObject(pillar.geom,0,0,1.3);
}

command関数ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®å…¥åŠ›ã‚’å‡¦ç†ã™ã‚‹é–¢æ•°ã§ã™ã€‚caseã®å³ã«ã‚ã‚‹’r'ãªã©ã®æ–‡å­—ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒæŠ¼ã•ã‚ŒãŸæ–‡å­—ã«å¯¾å¿œã—ã¾ã™ã€‚ã“ã®éƒ¨åˆ†ã«å¿…è¦ãªå‡¦ç†ã‚’書ã‘ã°ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’作るã“ã¨ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚キーボードã®s, j ,k, lキーを押ã™ã¨å††æŸ±ã‚„ボールã«å¤–力ãŒåƒã,rキーを押ã™ã¨ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒãƒªã‚¹ã‚¿ãƒ¼ãƒˆã—,コントロールキーを押ã—ãªãŒã‚‰pキーを押ã™ã¨ä¸€æ™‚åœæ­¢ã—ã¾ã™ï¼Ž

å†å®Ÿè¡Œ

ã“ã“ã§ã¯ã€’r'ã‚­ãƒ¼ãŒæŠ¼ã•れるã¨restart関数ãŒã‚ˆã°ã‚Œã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒå†å®Ÿè¡Œã—ã¾ã™ã€‚ãªãŠã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†å®Ÿè¡Œã™ã‚‹å ´åˆã¯æœ€ä½Žä»¥ä¸‹ã®å‡¦ç†ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚サンプルプログラムã§ã¯ç°¡å˜ã«ã™ã‚‹ãŸã‚ã€ãƒœãƒ‡ã‚£ã¨ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’破壊ã—ã€å†ç”Ÿã—ã¦ã„ã¾ã™ã€‚

  • 接触ジョイント(contact joints)ã®å‰Šé™¤
  • å„ボディã®ä½ç½®ã¨å§¿å‹¢ã‚’リセットã™ã‚‹ã€‚
  • å„ボディã®é€Ÿåº¦ã¨è§’速度をリセットã™ã‚‹ã€‚
  • ジョイントを制御ã—ã¦ã„ã‚‹å ´åˆã€ç›®æ¨™é€Ÿåº¦ã¨æœ€å¤§ç™ºæ®ãƒˆãƒ«ã‚¯ã‚’リセットã™ã‚‹ã€‚

ãªãŠã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰sample15ã¯ã“ã“ã«ã‚りã¾ã™ã®ã§ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦å®Ÿè¡Œã—ã¦ãã ã•ã„.

5 Responses to 15. キーボードæ“作ã¨å†å®Ÿè¡Œ

  1. star MonsterID Icon star on 2010-10-20

    ã“ã‚“ã«ã¡ã¯ã€‚今回ODEã®å‹‰å¼·ã‚’ã—ã¦ã„ã‚‹starã¨ã„ã„ã¾ã™ã€‚
    çªç„¶ã§ã™ãŒã“ã®ãƒšãƒ¼ã‚¸ã§ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ãƒœãƒ¼ãƒ«ã‚„円柱を手動ã§å‹•ã‹ã—ã¦ã„ã¾ã™ã‚ˆã­ã€‚
    æ€ã£ãŸã‚“ã§ã™ãŒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿å†…ã®å‰›ä½“ã‚’é‡åЛ以外ã§è‡ªå‹•ã§å‹•ã‹ã™ã“ã¨ã¯ã§ãã‚‹ã‚“ã§ã™ã‹ï¼Ÿ
    例ãˆã°ã€ãƒœãƒ¼ãƒ«ã‚’å·¦å³ã«ç§»å‹•ã—ç¶šã‘ã‚‹ã¨ã„ã†å‹•作ãŒã§ãã‚‹ã¨è‰²ã€…ã¨é¢ç™½ã„ã¨ãŠã‚‚ã†ã‚“ã§ã™ã‘ã©ã€‚

    • demu MonsterID Icon demu on 2010-10-25

      starã•ん,

      ã“ã‚“ã«ã¡ã¯ï¼Ž

      ã§ãã¾ã™ï¼Ž
      剛体ã«åŠ›ã‚„ãƒˆãƒ«ã‚¯ã‚’åŠ ãˆã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã§ï¼Œã‚¢ã‚¤ãƒ‡ã‚£ã‚¢æ¬¡ç¬¬ã§ã„ã‚ã„ã‚ã¨é¢ç™½ã„ã“ã¨ãŒã§ãã¾ã™ï¼Ž
      ç§ã®è¬›ç¾©ã§ã¯ï¼Œï¼¯ï¼¤ï¼¥ã‚’使ã„ゲームを作る課題を出ã—ã¦ã„ã¾ã™ï¼Ž

      ã§ã‚€

      • star MonsterID Icon star on 2010-11-08

        返信ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
        ã‚れã‹ã‚‰è‰²ã€…ã¨èª¿ã¹ã¦ã¿ãŸã®ã§ã™ãŒå‰›ä½“をプログラムã§è‡ªå‹•æ“作ã™ã‚‹æ–¹æ³•ãŒã©ã†ã—ã¦ã‚‚分ã‹ã‚Šã¾ã›ã‚“。
        å¤±ç¤¼ã‚’æ‰¿çŸ¥ã§æ–¹æ³•ã«ã¤ã„ã¦æ•™ãˆã¦ã„ãŸã ã‘ãªã„ã§ã—ょã†ã‹ï¼Ÿ

  2. Jonathan MonsterID Icon Jonathan on 2010-01-02

    Thanks for the tutorials!

  3. demu MonsterID Icon demu on 2010-01-03

    Thank you for your comments. I am not sure that you can read Japanese, however, you can read the English page of this article.

    http://demura.net/english/ode15

    Cheers!

コメントをã©ã†ãž

メールアドレスãŒå…¬é–‹ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。

2,639 views