Как я могу исправить эту неявную ошибку принуждения во Flash? - PullRequest
1 голос
/ 13 марта 2009

Я играю с Physics Engine для AS3 , и приведенный ниже код в основном является примером hello world. Однако я внес небольшое изменение, объявив свойство «ball» как WheelParticle в начале определения класса. (простите мою терминологию, если она неверна). Ранее он был объявлен внутри конструктора как

var ball:WheelParticle = new WheelParticle(...);

и это сработало нормально. Но теперь, пытаясь по-моему, я получаю ошибку

неявное приведение значения типа org.cove.ape.WheelParticle для несвязанный тип Class | ball: WheelParticle = new ... и т. д. и т. д.

"незаконное присвоение классу WheelParticle "

Так что я думаю, что мое заявление public var ball:WheelParticle должно быть чем-то другим. Но что?

В любом случае, вот код. Это довольно коротко. Я бы сослался на документацию, но ее нет. В любом случае, я ничего не найду.

пакет {

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

    public class Bounce extends Sprite {

         public var ball:WheelParticle;

    public function Bounce() {

        stage.focus = this;
        stage.frameRate = 100;
        addEventListener(Event.ENTER_FRAME, run);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, moveLeft);

        APEngine.init(0.3);
        APEngine.container = this;
        APEngine.addMasslessForce(new Vector(0,2));

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

        var ball:WheelParticle = new WheelParticle(250,10,40, false, 1, 0.7, 0.1);
        defaultGroup.addParticle(ball);

        var rp:RectangleParticle = new RectangleParticle(250,300,300,50,0,true);
        defaultGroup.addParticle(rp);


        APEngine.addGroup(defaultGroup);
      }

      private function moveLeft(e:Event):void{
          ball.speed += 1;
    }

      private function run(evt:Event):void {
         APEngine.step();
         APEngine.paint();
      }
   }
* *} Тысяча двадцать-один

1 Ответ

2 голосов
/ 13 марта 2009

Импортируйте класс WheelParticle (вместе со всеми необходимыми вам классами) в явном виде как:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;

import org.cove.ape.APEngine;
import org.cove.ape.Group;
import org.cove.ape.RectangleParticle;
import org.cove.ape.Vector;
import org.cove.ape.WheelParticle;

    public class Bounce extends Sprite {

Отсутствие импорта является наиболее вероятной причиной вашей ошибки. Также обратите внимание, что в вашем примере кода есть небольшая ошибка.

 public class Bounce extends Sprite {

     public var ball:WheelParticle;

объявляет переменную-член для класса Bounce типа WheelParticle с именем ball.

var ball:WheelParticle = new WheelParticle(250,10,40, false, 1, 0.7, 0.1);

Создает другую переменную с тем же типом и тем же именем, но локальную для конструктора Bounce. И этот затмевает бывшего. Если вы хотите использовать переменную-член, используйте:

ball = new WheelParticle(250,10,40, false, 1, 0.7, 0.1);
...