2011-12-20 5 views
1

QuickBox2D으로 작업하고 있습니다.AS3 : 개체 값 변경

다음 문장을 사용하여 볼을 드롭했습니다. 내가 개체 내에서 두 값을 변경하려면 if 문 동안

  gameBall = sim.addCircle({x:(mouseX/30), y:(2), radius:0.15, density:1, restitution:0.7, friction:0, skin:ball, scaleSkin:false, angularDamping:20}); 

:

   gameBall({friction:1,restitution:0}); 
내가받을 다음과 같은 오류 :

Call to a possibly undefined method gameBall. 

전체 코드 :

package { 

import flash.display.MovieClip; 
import com.actionsnippet.qbox.*; 
import flash.events.MouseEvent; 
import flash.events.Event; 

[SWF(width = 300, height = 600, frameRate = 60)] 

public class LuckyHitBeta extends MovieClip { 

    public var sim:QuickBox2D; 
    var winBox:QuickObject; 
    var looseBox:QuickObject; 
    var looseBox2:QuickObject; 
    var gameBall:QuickObject; 
    var simContacts:QuickContacts; 
    var isFiring:Boolean=false; 
    var ballIcon:ballIcon_mc; 



    /** 
    * Constructor 
    */ 
    public function LuckyHitBeta() 
    { 
     liveIcon(); 
     sim = new QuickBox2D(this); 
     simContacts = sim.addContactListener(); 
     simContacts.addEventListener(QuickContacts.ADD, contactListener); 
     //Important Collisions; 

     winBox = sim.addBox({x:2,y:597/30, width:98/30, height:10/30, density:0, skin:stick, skinScale:false}); 
     looseBox = sim.addBox({x:5,y:597/30, width:98/30, height:10/30, density:0, skin:stick, skinScale:false}); 
     looseBox2 = sim.addBox({x:8,y:597/30, width:98/30, height:10/30, density:0, skin:stick, skinScale:false}); 
     //Collisions 
     sim.addBox({x:3.5,y:560/30, width:72/30, height:13/30, density:0, skin:stick, skinScale:false, angle:1.57}); 
     sim.addBox({x:6.5,y:560/30, width:72/30, height:13/30, density:0, skin:stick, skinScale:false, angle:1.57}); 
     sim.addBox({x:0/30,y:300/30, width:600/30, height:28/30, density:0, skin:stick, skinScale:false, angle:1.57}); 
     sim.addBox({x:300/30,y:300/30, width:600/30, height:28/30, density:0, skin:stick, skinScale:false, angle:1.57}); 



     // make obstacles 
     for (var i:int = 0; i<(stage.stageWidth/28); i++){ 
     //End 
      sim.addCircle({x:1.2 + i * 0.8, y:16, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
      sim.addCircle({x:0.6 + i * 0.8, y:15, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
     } 

     for (var o:int = 0; o<(stage.stageWidth/55); o++){ 
     //Middle 

       sim.addCircle({x:1.3 + o * 1.5, y:14, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
       sim.addCircle({x:1.3 + o * 1.5, y:13, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
       sim.addCircle({x:1.3 + o * 1.5, y:12, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
       sim.addCircle({x:1.3 + o * 1.5, y:11, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
       sim.addCircle({x:1.3 + o * 1.5, y:10, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
     } 

     for (var u:int = 0; u<(stage.stageWidth/45); u++){  
     //Start 
      sim.addCircle({x:0.8 + u * 1.3, y:09, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
      sim.addCircle({x:1.55 + u * 1.3, y:08, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
      sim.addCircle({x:0.8 + u * 1.3, y:07, radius:0.15, density:0, skin:ping, scaleSkin:false}); 
      sim.addCircle({x:1.55 + u * 1.3, y:06, radius:0.15, density:0, skin:ping, scaleSkin:false}); 

     } 
     addEventListener(Event.ENTER_FRAME,onEnterFrm); 
     stage.addEventListener(MouseEvent.CLICK, _clicked); 
     sim.start(); 



    } 

    /** 
    * .. 
    * @param e MouseEvent.CLICK 
    */ 
    private function _clicked(e:MouseEvent) 
    { 
     if (! isFiring){ 
      gameBall = sim.addCircle({x:(mouseX/30), y:(2), radius:0.15, density:1, restitution:0.7, friction:0, skin:ball, scaleSkin:false, angularDamping:20}); 
      isFiring=true; 
      ballIcon.gotoAndStop(2); 

     } 
    } 

    private function liveIcon():void { 
     ballIcon=new ballIcon_mc(); 
     addChild(ballIcon); 
     ballIcon.y=30; 
    }   

    private function onEnterFrm(e:Event):void 
    {   
     ballIcon.x=mouseX; 
     if (gameBall && gameBall.body.IsSleeping()) 
      { 
       gameBall.destroy(); 
       gameBall = null; 
       isFiring=false; 
       ballIcon.gotoAndStop(1); 
      } 
    } 

    private function contactListener(e:Event) 
    { 
     if (simContacts.isCurrentContact(winBox,gameBall)) 
     { 
      // Won. 
      trace ('You won!'); 
      isFiring=false; 
      ballIcon.gotoAndStop(1); 
     } 

     if (simContacts.isCurrentContact(looseBox,gameBall)) 
     { 
      // Loose. 
      trace ('You loose!'); 
      gameBall({friction:1,restitution:0}); 
      isFiring=false; 
      ballIcon.gotoAndStop(1); 
     } 
    } 


} 

}

답변

1

gameBall 어떤 Object이다, 그러나 당신은 (괄호 () 마음)을 function로 사용하려고합니다. 보통은 표기법으로 객체의 속성에 액세스 :

object.property = value;

QuickBox2D 당신이 개체 초기화 후 해당 속성을 변경할 수있는 경우 잘 모르겠습니다 만. 내가 Box2D과 일한 이후로 꽤 오래되었습니다.

6

코드에서 gameBalladdCircle 메서드로 생성 된 QuickObject을 나타내는 변수입니다. 이 객체 인 때, 라인에,

gameBall({friction:1,restitution:0}); 

당신은, 함수로 gameBall를 사용합니다. 그것은 다른 모든 매개 변수를 덮어 쓰기 때문에이 솔루션은 당신이하고 싶지 않은

gameBall.params.friction = 1.0; 
gameBall.params.restitution = 0.0; 

주,

gameBall.params = { friction: 1.0, restitution: 0.0 }; 

입니다.

QuickObject에 대한 문서는 here입니다.

+0

정말 고맙습니다! –

+0

당신을 진심으로 환영합니다! –

+0

변경 사항이 발생했는지 확인하기 위해 볼이지면과 접촉하자마자 'density = 0;'을 배치했습니다. 하지만 공은 계속 튀어 오릅니다. 변화의 흔적이 없습니다! –