![]() |
|
||||||||||
|
|||||
|
[+1 14.08.08]
[+1 20.08.08] |
кусок моего кода:
с этим можно как-то стправится? я по типу достоваемого объекта собирался определять, что с ним делать. теперь, видимо придется добавлять какую-нить переменную-флаг
__________________
~ Never trouble trouble till trouble troubles you! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Все верно typeof возвращает, это же объект.
|
|
|||||
|
[+1 14.08.08]
[+1 20.08.08] |
ыть. я воспользовался typeof потому что instanceof Floor выдавало неправильный результат. ошибка где-то выше, я даже знаю, где примерно.
вот код: var sprite = Core.spritedata[btnPlacing.curSprite].copy();
sprite.test ();
trace ("WTools:cellInvoke. sprite instanceof Floor="+(sprite instanceof Floor)); //false
trace ("WTools:cellInvoke. sprite instanceof Sprite="+(sprite instanceof Sprite)); //true
import maped.data.sprites.Sprite;
class maped.data.sprites.Floor extends Sprite {
function Floor (node:XMLNode){
super (node);
}
function copy (){
var c:Floor= super.copy ();
return c;
}
}
ошибка видимо в том, что в Floor:copy я обращаюсь к super.copy (), который возвращает объект Sprite. Ка только это исправить? Не пользоваться родительским copy()?
__________________
~ Never trouble trouble till trouble troubles you! Последний раз редактировалось iNils; 10.12.2007 в 18:26. |
|
|||||
|
[+1 14.08.08]
[+1 20.08.08] |
class maped.data.Spritedata extends Array{
// var sprites:Array;
var xml:XML;
var loaded:Boolean;
function Spritedata (){
loaded=false;
}
function load (file){
xml = new XML ();
xml.load (file);
xml.onLoad = Delegate.create (this,onLoad);
}
function onLoad (success){
if (success){
for (var i=0; i< xml.firstChild.childNodes.length; i++){
var node:XMLNode = xml.firstChild.childNodes[i];
switch (node.nodeName){
case 'floor':
this.push (new Floor (node));
break;
case 'object':
this.push (new Obj (node));
break;
case 'east_wall':
this.push (new EastWall(node));
break;
case 'north_wall':
this.push (new NorthWall(node));
break;
}
}
loaded=true;
} else {
trace ("Spritedata:onLoad. загрузить не удалось.");
}
}
}
__________________
~ Never trouble trouble till trouble troubles you! |
|
|||||
|
[+1 14.08.08]
[+1 20.08.08] |
метод copy () преднозначен для создания копии экземпляра класса. В новой копии можно будет изменять значения, не боясь, что они изменятся в оригинальном экземпляре. Выполняют ту роль, для которой перегружают оператор = в спп.
Здесь я попытался сделать следующее. когда для экземпляра класса Floor вызывается copy (), то он вызывает такую же функцию класса-родителя Sprite. которая копирует свойства общие для Sprite и Floor. Но в результате получается, что ф-ия copy () класса Floor возаращает экземпляр Sprite, несмотря на var c:Floor= super.copy () можно его как-то преобразовать(то что называется type cast) в экземпляр класса Floor?
__________________
~ Never trouble trouble till trouble troubles you! |
|
|||||
|
[+1 14.08.08]
[+1 20.08.08] |
а можно принудительео объект из super.copy() привести к Floor? ну, так, как мы приводим строку в число
str = "10"; n = Number(str); или это должно быть предусмотрено конструктором класса?
__________________
~ Never trouble trouble till trouble troubles you! Последний раз редактировалось Chas; 10.12.2007 в 20:27. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|