Просмотр полной версии : Ошибка #1034 Type Coercion failed
Очень часто вылезает странная рантайм ошибка:
[Fault] exception, information=TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::MovieClip@108d05509 to CustomClass.
CustomClass содержится в swc и экспортирован как Sprite.
Перекомпиляция swc и повторная компиляция флэшки помогает избавится от этой ошибки на некоторое время, но она возвращается опять. Компилятор ASC2, AIR 3.4, на более ранних SDK такое не наблюдается.
Кто-нибудь встречался с таким? Решаемо?
Конфликт типов. CustomClass судя по всему экстендится как Sprite, а создаваемый объект имеет изначально класс MovieClip. Попробуй поменять extend на MovieClip в CustomClass.
caseyryan
07.11.2013, 19:15
Скорее всего баг компилятора. Но вполне возможна и ошибка в коде. Можно глянуть участок кода в котором вылетает эта ошибка?
Менять базовый класс CustomClass на MovieClip не помогает, пробовал первым делом.
Ошибка возникает когда передаю классы на растеризацию в DMT.
Думаю, что дело не в коде, потому что если просто перекомпилить swc, без изменений, то ошибка уходит.
Так же думаю, что дело в компиляторе, интересует как от этого избавиться)
caseyryan
07.11.2013, 20:05
Проблема в коде.
Ошибка возникает когда передаю классы на растеризацию в DMT.
(Видимо предполагается, что все здесь присутствующие, безоговорочно знают что такое DMT, хотя лично я понятия не имею что это, ну да ладно) Надо тайпкастинг делать при передаче. Если в качестве параметра ожидается мувиклип, а ему суют какой-то CustomClass , то ничего удивительного, что компилятор может этого не понять.
Самый простой пример:
var cc:CustomClass = new CustomClass();
rasterize(cc); // ошибка type coercion
rasterize(cc as MovieClip); // все ок
function rasterize(someShit:MovieClip):void {
}
gloomyBrain
07.11.2013, 20:37
caseyryan, ошибка возникает в рантайме.
flaxe, а что такое DMT в данном случае?
caseyryan
07.11.2013, 20:46
caseyryan, ошибка возникает в рантайме.
Я уже понял. И все-таки склоняюсь к тому, что там кое где-нет тайпкастинга
DMT видимо сокращение от Dynamically Mapping Textures.
Сорри, да DMT это Dynamically Mapping Textures, https://github.com/XTDStudios/DMT
Ошибка возникает в конструкторе CustomClass.
И опять же повторюсь, ошибка не постоянна при одном и том же коде.
caseyryan
08.11.2013, 11:41
покажите конструктор CustomClass
CustomClass это экспортированный из Flash IDE класс с базовым Sprite. Конструктор у него генерится IDE.
Вот весь стек ошибки: https://dl.dropboxusercontent.com/u/11076330/error_stack.png
caseyryan
08.11.2013, 11:56
Я вижу там старлинг. А у него не flash.display, а starling.display
Видимо зарытую собаку надо искать вообще в другом месте. А данная ошибка это лишь побочный эффект
Ну и, думаю стоит скачать AIR 3.8 или 3.9 для верности
Старлинг тут не причем. Ошибка возникает еще до взаимодействия с ним.
Опять же, дело не в коде, потому что он работает при следующей компиляции, при этом без каких-либо изменений.
AIR 3.9 та же беда.
Добавлено через 2 часа 42 минуты
Дело 100% в компиляторе.
Если использовать AIR SDK без нового компилятора проблема самоустраняется.
Странно, что этот баг до сих пор не устранили. Видел его уже а нескольких машинах, у нескольких людей.
https://bugbase.adobe.com/index.cfm?event=bug&id=3562040
skorpionnn333
11.08.2014, 21:13
У меня тоже такая ошибка возникает.Вот код в классе Main package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
public var curball:Ball;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
spawnBall();
}
public function spawnBall():void
{
var ball:Ball = new Ball;
addChild(ball);
ball.x = Math.random () * 700;;
curball = ball;
flyBall(ball);
}
public function flyBall(ball:Ball):void
{
var time:Timer = new Timer (100,600);
time.start ();
time.addEventListener(TimerEvent.TIMER,moveball);
}
private function moveball(e:TimerEvent):void
{
curball += 1;
}
}
}
И код в классе Ball package
{
import flash.display.Sprite;
public class Ball extends Sprite
{
public var symb:Ballsymb = new Ballsymb;
public function Ball()
{
addChild(symb);
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.