Come posso correggere questo errore di coercizione implicita in Flash?
-
22-07-2019 - |
Domanda
Sto giocando con un Physics Engine per AS3 e il codice seguente è sostanzialmente il ciao esempio mondiale. Tuttavia, ho apportato una leggera modifica dichiarando la proprietà "palla". come WheelParticle all'inizio della definizione della classe. (perdona la mia terminologia se è sbagliata). In precedenza, era stato dichiarato all'interno del costruttore come
var ball:WheelParticle = new WheelParticle(...);
e ha funzionato bene. Ma ora, provando a modo mio, ricevo l'errore
Coercizione implicita di un valore di tipo org.cove.ape.WheelParticle in un tipo non correlato Classe | palla: WheelParticle = new ... etc etc
" assegnazione illegale alla classe WheelParticle "
Quindi sto pensando che la mia dichiarazione public var ball: WheelParticle
dovrebbe essere qualcos'altro. Ma cosa?
Comunque, ecco il codice. È abbastanza corto. Vorrei fare riferimento alla documentazione, ma non c'è nessuno. Nessuno che riesca a trovare comunque.
package {
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();
}
}
}
Soluzione
Importa la classe WheelParticle
(insieme a ogni altra classe di cui hai bisogno) esplicitamente come:
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 {
L'importazione mancante è la causa più probabile dell'errore. Inoltre, nota che il tuo codice di esempio ha un piccolo problema tecnico.
public class Bounce extends Sprite {
public var ball:WheelParticle;
dichiara una variabile membro per la classe Bounce
di tipo WheelParticle
chiamata ball
.
var ball:WheelParticle = new WheelParticle(250,10,40, false, 1, 0.7, 0.1);
Crea un'altra variabile con lo stesso tipo e lo stesso nome ma locale al costruttore di Bounce
. E questo ombreggia il primo. Se vuoi usare la variabile membro usa:
ball = new WheelParticle(250,10,40, false, 1, 0.7, 0.1);