Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.12.2007, 17:41
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 1  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
По умолчанию typeof и элемент массива

кусок моего кода:
Код:
import maped.data.sprites.*;
var a = new Array ();
var t = new Floor();
a.push (t);

trace (typeof a[0]); //выводит Object!!!!
с этим можно как-то стправится? я по типу достоваемого объекта собирался определять, что с ним делать. теперь, видимо придется добавлять какую-нить переменную-флаг
__________________
~
Never trouble trouble till trouble troubles you!

Старый 10.12.2007, 17:43
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код:
trace (a[0] instanceof Floor); //// true
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.12.2007, 17:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Все верно typeof возвращает, это же объект.

Старый 10.12.2007, 18:16
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 4  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
ыть. я воспользовался 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
класс Floor нужен, хотя он пока "пустой"
Код:
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;
	}
}
класс-родитель:
Код:
class maped.data.sprites.Sprite {
	var frame; var name;
	function Sprite (node:XMLNode){
		frame = Number (node.attributes.frame);
		name=node.attributes.name;
	}
	function copy (){
		var c = new Sprite ();
		c.frame = frame;
		c.name = name;
		return c;
	}
}
ошибка видимо в том, что в Floor:copy я обращаюсь к super.copy (), который возвращает объект Sprite. Ка только это исправить? Не пользоваться родительским copy()?
__________________
~
Never trouble trouble till trouble troubles you!


Последний раз редактировалось iNils; 10.12.2007 в 18:26.
Старый 10.12.2007, 18:35
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Core.spritedata[btnPlacing.curSprite] - это объект какого класса?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.12.2007, 18:40
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 6  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
Код:
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!

Старый 10.12.2007, 18:56
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
У меня такой вопрос метод copy не берет ничего от экземпляра, то почему это метод экземпляра, а не класса?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.12.2007, 20:11
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 8  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
метод copy () преднозначен для создания копии экземпляра класса. В новой копии можно будет изменять значения, не боясь, что они изменятся в оригинальном экземпляре. Выполняют ту роль, для которой перегружают оператор = в спп.
Здесь я попытался сделать следующее. когда для экземпляра класса Floor вызывается copy (),
Код:
function copy (){
		var c:Floor= super.copy ();
		return c;
	}
то он вызывает такую же функцию класса-родителя Sprite.
Код:
function copy (){
		var c = new Sprite ();
		c.frame = frame;
		c.name = name;
		return c;
	}
которая копирует свойства общие для Sprite и Floor. Но в результате получается, что ф-ия copy () класса Floor возаращает экземпляр Sprite, несмотря на var c:Floor= super.copy ()

можно его как-то преобразовать(то что называется type cast) в экземпляр класса Floor?
__________________
~
Never trouble trouble till trouble troubles you!

Старый 10.12.2007, 20:15
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Метод copy в Floor делает не копию экземпляра Floor, а новый экземпляр класса Sprite. Естественно instanceof Floor выдаст false.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.12.2007, 20:25
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 10  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
а можно принудительео объект из 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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.