網路教學(e-Learning)校園社群(e-Community)服務台(e-Service)系所班網(e-Class)登入
2012.10.16 角色攻擊(近身)
by 高鈺婷 2012-10-17 21:13:53, 回應(0), 人氣(531)

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;

var enemy:MovieClip = new emy();
var attk:MovieClip  = new attack();
var hp         :int = 5;
var dam      :int = 2;     //每次損血量
var plySpd  :int = 10;
var emySpd:int = 8;

var attkable:Boolean = true;
var hitable:Boolean   = true;

create();
function create()
{
 stage.addChild(enemy);
 enemy.gotoAndPlay(1);
 enemy.x = Math.floor(Math.random()*451)+50;
 enemy.y = 50;
 hp = 5;
 enemy.addEventListener(Event.ENTER_FRAME,AI);
 
}

function AI(e:Event)
{
 if(enemy.x + emySpd >= 500)
 {
  enemy.x = 500;
  emySpd *=  -1;
 }
 else
     if(enemy.x + emySpd < 50)
 {
  enemy.x  =  60;
  emySpd *=  -1;
 }
     else
 enemy.x +=   emySpd;
}
stage.addEventListener(Event.ENTER_FRAME,loop);
function loop(e:Event)
{
 if(enemy.death == true)
 {
  stage.removeChild(enemy);
  create();
  hitable = true;
 }
 if(attk.over == true)
 {
  attk.over = false;
  attk.removeEventListener(Event.ENTER_FRAME,got);
  stage.removeChild(attk);
  attkable = true;
 }
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,kdown);
function kdown(e:KeyboardEvent)
{
 switch(e.keyCode)
 {
  case 37:
      if (player.x - plySpd < 50 )
     player.x = 50;
   else
     player.x -= plySpd;
     break;
  case 39:
      if (player.x + plySpd > 500)
     player.x = 500;
    else
      player.x += plySpd;
      break;
  case 38:
       if(player.y - plySpd < 110)
     player.y = 110;
     else
     player.y -= plySpd;
     break;
  case 40:
       if(player.y - plySpd > 360)
     player.y = 360;
     else
     player.y += plySpd;
     break;
  case 32:
       if(attkable == true)
    {
     stage.addChild(attk);
     attkable = false;
     attk.x = player.x;
     attk.y = player.y - player.height/2;
     attk.gotoAndPlay(2);
     if (hp >0)
     {
      hitable = true;
      attk.addEventListener(Event.ENTER_FRAME,got);
     }
    }
 }
}
function got(e:Event)
{
 if (hitable == true && attk.hitTestObject(enemy))
 {
  hitable = false;
  hp -= dam;
  if(hp > 0)
     enemy.play();
  else
      enemy.gotoAndPlay("die");
   enemy.removeEventListener(Event.ENTER_FRAME,AI);
 }
}