2010-09-22 1 views
0

Создание игры в стиле pacman с использованием Flash (AS3). Есть 3 игрока, соревнующихся, чтобы съесть большинство точек. Прямо сейчас, когда один игрок ест точку, на экране этого игрока точка уходит (но только на секунду) и снова появляется на экране. Другой игрок, играющий, не видит, что точка ушла и снова появилась.Создание игры в стиле pacman с использованием Flash (AS3)

Использование hitTestObject, когда игрок касается точки, точка больше не должна быть замечена на сцене. Я использую общий объект для создания этой многопользовательской игровой среды. Я новичок в использовании SharedObject и AS3.

  public function PlayerSelect() 
        {   
         nc = new NetConnection(); 
         nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
         nc.connect("rtmp://r92kq5ew6.rtmphost.com/g1"); 

         select_screen.btn1.addEventListener(MouseEvent.MOUSE_UP, select1); 
         select_screen.btn2.addEventListener(MouseEvent.MOUSE_UP, select2); 
         select_screen.btn3.addEventListener(MouseEvent.MOUSE_UP, select3); 
         for(var i=0; i<circ_num; i++) { 
          circle_ary[i] = new Circle(); //linkage in the library 
          circle_ary[i].x=0; 
          circle_ary[i].y=0; 
          stage.addChild(circle_ary[i]); 
         } 

        } 

     public function netStatusHandler(event:NetStatusEvent):void 
       { 
        trace("connected is: " + nc.connected); 
        trace("event.info.level: " + event.info.level); 
        trace("event.info.code: " + event.info.code); 

        switch (event.info.code) 
        { 
         case "NetConnection.Connect.Success": 
          trace("Congratulations! you're connected"); 
          so = SharedObject.getRemote("ballPosition", nc.uri, false); 
          so.connect(nc); 
          so.addEventListener(SyncEvent.SYNC, syncHandler); 
          break; 
         case "NetConnection.Connect.Rejected": 
         case "NetConnection.Connect.Failed": 
          trace ("Oops! you weren't able to connect"); 
          break; 
        } 

       } 

    private function stageInit():void 
      { 
       for(var i=0; i<circ_num; i++) { 
        pos_ary[i] = new Array(); 
        pos_ary[i][0] = Math.random()*stage.stageWidth; 
        pos_ary[i][1] = Math.random()*stage.stageHeight; 

        so.setProperty("dots", pos_ary); 
       } 


      } 

// update clients when the shared object changes 
     private function syncHandler(event:SyncEvent):void 
     { 
      // when a sync event is fired 
      // update the information for all clients 

      //here we update states for all players 
      for (var i:String in so.data) //run through all players in the data array 
      { 

       if (i == "dots") 
       { 
        for(var j=0; j<circ_num; j++) 
        { 
         circle_ary[j].x = so.data["dots"][j][0]; 
         circle_ary[j].y = so.data["dots"][j][1]; 
         //pos_ary[j][0] = so.data["dots"][j][0]; 
         //pos_ary[j][i] = so.data["dots"][j][i]; 
        } 
       } 

       else if(player_ary[i] == undefined) 
         makePlayer(i); //if the player does not exist we create it 

       else if (i!=me) //we do not need to update our selves from the server, just everyone else 
       { 
        player_ary[i].x = so.data[i][0]; //here I am treating data like a 2d array 
        player_ary[i].y = so.data[i][1]; //where [i][0] is x poition data and 
       }         //[i][1] is y position data 
      } 
     } 

// function eatCircle -------------------------------------------------------------- 
function eatCircle():void { 
    for (var j:int = 0; j<circ_num; j++) 
    { 
     if (player_ary[me].hitTestObject(circle_ary[j])) 
     { 
      trace ("I ate the circle"); 
      circle_ary[j].y = -100; 
      pos_ary[j][1] =-100; 
      so.setProperty("dots", pos_ary); 
     } 


    } 

} 
+0

В чем проблема? – Aaron

+1

Это другой игрок, который не видит его исчезновения? На 100% ясно, что это не ваше намерение. Просто перечитайте вопрос, и это может быть так? – Aaron

ответ

1

Все ли игроки пытаются написать там доску для игры в галактику. Если это так, когда один игрок ест точку и записывает туда карту в gamestate, тогда другой игрок может не понимать, что игровой режим изменился и перезаписал карту с помощью карты. Это означало бы, что съеденная точка снова появится.