2011-12-20 78 views
1

我正在與QuickBox2DAS3:更改對象的值

我用下面的語句丟了一個球。

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

在一個if語句我想改變物體內的兩個值:

   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

在您的代碼中,gameBall是一個變量,指的是由addCircle方法創建的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

非常感謝! – 2011-12-20 06:14:20

+0

不客氣! – 2011-12-20 06:17:15

+0

爲了確保發生的變化,我一旦把球與地面接觸,就把'密度= 0;'放在'密度= 0;'。但球繼續彈跳。沒有改變的跡象! – 2011-12-20 23:46:17