Остановить и сбросить частичное колесо — физический движок Actionscript (APE) (последняя версия)

#actionscript-3 #actionscript #ape

#actionscript-3 #actionscript #ape

Вопрос:

Я пытаюсь создать простое действие исчезновения, когда частица колеса попадает в специальную исчезающую частицу круга. Обычно частица колеса отскакивает от множества других частиц окружности, но когда частица колеса сталкивается с этой частицей окружности, действие приостанавливается, воспроизводится анимация, а когда действие возобновляется, многие частицы окружности исчезают.

Проблема в том, что частица колеса должна просто выпадать из полной остановки, но она продолжается, как будто только что отскочила от, теперь несуществующей CircleParticle. У меня возникли проблемы с очисткой сил. Я пробовал init (), AddForce () и changing .velocity среди других вещей, но он продолжает хотеть продолжить боковое подпрыгивающее движение.

Я использую последнюю версию trunk APE, чтобы фиксировать события столкновения для звука.

 package{

import flash.display.MovieClip;
import flash.events.*;  
    import org.cove.ape.*;

public class DropTest extends MovieClip {

    public var self;
    public function DropTest(){
        self = this;

        APEngine.init(0.25);
        APEngine.container = this;
        //APEngine.damping = 0.92;
        APEngine.addForce(new VectorForce(false,0,15));

         var defaultGroup = new Group();
         defaultGroup.collideInternal = true;

         var peg1 = new CircleParticle(10, 30, 5, true, 0.2, 0.3);
         defaultGroup.addParticle(peg1);

          var peg2 = new CircleParticle(35, 30, 5, true, 0.2, 0.3);
         defaultGroup.addParticle(peg2);


         APEngine.addGroup(defaultGroup);           

         peg2.addEventListener(CollisionEvent.COLLIDE, function(evt:CollisionEvent){
                self.removeEventListener(Event.ENTER_FRAME, runAPE);    

                defaultGroup.removeParticle(peg2);
/*  The Wheel needs to stop and drop straight down from here.
                This doesn't seem to work.*/
                wheel.init();

                self.addEventListener(Event.ENTER_FRAME, runAPE);   
         });

        var wheel = new WheelParticle(12, 0, 10, false, 3);
        defaultGroup.addParticle(wheel);

        this.addEventListener(Event.ENTER_FRAME, runAPE);   

    }

    private function runAPE(evt:Event):void {
         APEngine.step();
         APEngine.paint();
      }
}
}
  

Ответ №1:

Я думаю, у меня есть решение. Я только что повторно создал экземпляр WheelParticle

 peg2.addEventListener(CollisionEvent.COLLIDE, function(evt:CollisionEvent){
            self.removeEventListener(Event.ENTER_FRAME, runAPE);    

            defaultGroup.removeParticle(peg2);
/*  The Wheel needs to stop and drop straight down from here.
            This doesn't seem to work.*/

           //  Replace with this
            defaultGroup.removeParticle(wheel);
            wheel = new WheelParticle(wheel.px,  wheel.px, 10, false, 3);
            defaultGroup.addParticle(wheel);


            self.addEventListener(Event.ENTER_FRAME, runAPE);   
 });
  

Единственная проблема сейчас заключается в том, что вращение колеса меняется при повторном создании его экземпляра.

Есть ли способ вручную изменить вращение?