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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.03.2011, 09:45
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 1  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
По умолчанию Расширение класса

Наверно вопрос глупый но все же:

хочу чтобы меш со мной здоровался:

Код AS3:
package{
	import alternativa.engine3d.objects.Mesh;
 
   public class Mesh2 extends Mesh{
 
		public function Mesh2(){
				//
		}
 
		function sayHello():void{
				trace("Hello!");
		}
   }
}
использую так:

Код AS3:
[..]
parser.parse(event.target.data, "model/texture");
for(var i=0; i<parser.objects.length; i++)
{	
 
		var mesh:Mesh2 = new Mesh2; // меши модели
		mesh = parser.objects[i] as Mesh2;
 
		mesh.sayHello();
}
[..]

Сtrl+Enter &rArr; появляется ошибка (при попытке mesh.sayHello)

Код:
Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"
Где я торможу? И что подправить, чтоб заработало?

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

Регистрация: Sep 2002
Сообщений: 30,784
Что вы хотели сказать первой строкой в цикле?

Старый 17.03.2011, 11:31
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 3  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Видимо, что-то у вас не работает в методе parser.parse(event.target.data, "model/texture");, потому что при попытке сослаться на parser.objects[i], вы получаете ссылку на null, о чем вам и говорит ошибка. А у null, очевидно, нет метода sayHello(). И да, зачем вы создаете новый объект Mesh2, в строчке, о которой говорит etc, если в следующей строчке вы уже привязываете к ссылке mesh что-то другое?
Про оформление кода:
Код AS3:
// Не забываем о спецификаторах доступа
public function sayHello():void{
    trace("Hello!");
}
 
// О типизации переменных
for(var i:int = 0; ... ; ...) { ... }
 
// Об операторных скобках конструктора
var mesh:Mesh2 = new Mesh2();

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

Регистрация: Sep 2002
Сообщений: 30,784
bav, нет, null получается при привидении Mesh к Mesh2.

Старый 17.03.2011, 12:41
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 5  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от bav Посмотреть сообщение
при попытке сослаться на parser.objects[i], вы получаете ссылку на null,
Null получается когда, приводится Mesh к Mesh2, т.к. если трейсить, то parser.objects содержит ровно столько объектов, сколько нужно )

Цитата:
Сообщение от etc Посмотреть сообщение
Что вы хотели сказать первой строкой в цикле?
Создание нового объекта. Причем если писать
Код AS3:
		var mesh:Mesh = new Mesh; // меши модели
		mesh = parser.objects[i] as Mesh;
то все отлично работает.


Последний раз редактировалось Srednas; 17.03.2011 в 12:45.
Старый 17.03.2011, 12:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Srednas, а зачем вы его создаёте, если на следующей строке вы берёте меш из массива в эту же переменную?
Почему вы решили, что массив будет содержать Mesh2, а не Mesh?

Старый 17.03.2011, 13:21
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 7  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от etc Посмотреть сообщение
Srednas, а зачем вы его создаёте, если на следующей строке вы берёте меш из массива в эту же переменную?
Можно и не создавать. Просто написать var mesh:Mesh;

Цитата:
Сообщение от etc Посмотреть сообщение
Почему вы решили, что массив будет содержать Mesh2, а не Mesh?
В массиве будут содержаться меши. Но ведь и Mesh2 "тоже меш", т.к. является наследником. Или нет?

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Srednas Посмотреть сообщение
В массиве будут содержаться меши. Но ведь и Mesh2 "тоже меш", т.к. является наследником. Или нет?
Послушайте, если вы вырастили яблоки синего цвета у себя на подоконнике, то это не означает, что яблоки, лежащие на полках в соседнем магазине, будут синими и с вашего подоконника.

Старый 17.03.2011, 13:42
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 9  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от etc Посмотреть сообщение
Послушайте, если вы вырастили яблоки синего цвета у себя на подоконнике, то это не означает, что яблоки, лежащие на полках в соседнем магазине, будут синими и с вашего подоконника.
Не совсем понял аналогию

Хорошо. Подскажите тогда как сделать так, чтобы у объектов из цикла появился метод sayHello()?

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

Регистрация: Sep 2002
Сообщений: 30,784
Переписать парсер, чтобы он в objects помещал ваши Mesh2.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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