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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.08.2012, 22:18
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 1  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
По умолчанию Ошибка 1009 (ссылка на null объект или свойство). Не понимаю где

Только начинаю осваивать работу с классами, пакетами и для меня составляет огромную трудность знать какие адобовские-флешевские классы надо импортировать для всяческих действий. А также эти ошибки в выводе, которые не дают скомпилироваться, но зато не указывают на место ошибки.

У меня есть два класса. С ссылками тоже были проблемы, но сейчас все уже ок.
В одном классе вызывается другой, который называется Background. А хотя что я, покажу вам оба класса.

Вот класс MainInit

Код AS3:
package src.site
{
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
 
	public class MainInit extends MovieClip
	{
 
		public function MainInit()
		{
			var back:Background = new Background();
			addChild(back);
		}
 
	}
 
}
А вот Background

Код AS1/AS2:
package src.site
{
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Stage;
 
	public class Background extends MovieClip
	{
 
		public function Background():void
		{
			var ground:Number = new Number();
			ground = stage.stageHeight;
			drawBuilding(1);
		}
		private function drawBuilding(type:Number)
		{
			var body:Graphics = this.graphics;
			switch (type)
			{
				case 1 :
					body.clear();
					body.beginFill(0);
					body.drawRect(0,0,180,400);
					body.endFill();
			}
		}
	}
}
Суть в том, что если рисовать в классе Background сразу в функции конструкторе(что не подходит из-за загромождения кода, хотелось бы рисовать с помощью функции) - то все работает. Все рисуется и отображается.

Но если рисовать с помощью дополнительной функции - ничего не рисуется и ошибка "TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"." словно указывает, что в классе Background "нифига не отрисовалось, приятель, и addChild-ить вообще-то нечего (в MainInit-е)".

И я научился этому из другого кода, но если body сделать вместо graphics shape-ом, то код
body.graphics.beginFill() (вместо сейчас стоящего body.beginFill()) не работает и говорит не к существующему свойству или функции обратился. Разве в шейпе или спрайте (он тоже такое выдает) нельзя графикой рисовать?

Старый 10.08.2012, 22:25
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
он выдает эту ошибку не из-за graphics. С ними тут как раз все ок. А вот обращение к stage в конструкторе класса Background не допустимо. Стоит переделать так:
Код AS3:
package src.site
{
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Stage;
 
	public class Background extends MovieClip
	{
 
		public function Background() // убрал void. Типизировать конструктор не обязательно
		{
                                 addEventListener(Event.ADDED_TO_STAGE, init);
 
		}
                      private function init(e:Event):void {
                               var ground:Number = new Number();
			ground = stage.stageHeight; // тут уже обращаться
			drawBuilding(1);
                      }
 
		private function drawBuilding(type:Number):void // а вот тут как раз void нужен, хоть это и не вызовет ошибки
		{
			var body:Graphics = this.graphics;
			switch (type)
			{
				case 1 :
					body.clear();
					body.beginFill(0);
					body.drawRect(0,0,180,400);
					body.endFill();
			}
		}
	}
}

Старый 10.08.2012, 22:27
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Ммм. Сказать по правде, я не врубился в Вашу проблему, НО заметил одну ошибку.
В конструкторе stage не определен. Нужно подписаться на событие addedToStage и обращаться к стейджу уже в нем.

Добавлено через 35 секунд
Ататата. Не успел =)
__________________
тут я

Старый 10.08.2012, 22:32
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 4  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Офигеть, спасибо.
Получается пока, грубо говоря, не появился ни на какой "сцене", нефиг сцену и спрашивать, как я понял.
Еще раз спасибо! Тернистый тернистый путь классов и пакетов

Старый 10.08.2012, 22:33
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Получается пока, грубо говоря, не появился ни на какой "сцене", нефиг сцену и спрашивать, как я понял.
Именно так

Старый 10.08.2012, 22:47
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 6  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
А еще можно ground параметром в конструктор передавать.

Старый 10.08.2012, 23:09
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 7  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Кстати, насчет второй ошибки, о которой я говорил. Почему-то Shape или Sprite в функции не воспринимает команды рисования графики. Если не в классе но в обычном fla работать все ок, а тут этот код вызывает ошибку "не существующие свойства или методы":

Код AS3:
				buldarray[countbuildings] = new Sprite();
				buldarray[countbuildings].graphics.beginFill(0);
				buldarray[countbuildings].graphics.drawRect(i,0,newwidth,newheight);
				buldarray[countbuildings].graphics.endFill();

Старый 10.08.2012, 23:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Оператор [] возвращает тип Object, а у Object нет свойства graphics. "В обычном fla" у Вас не включен строгий режим компиляции, и компилятор проверяет только синтаксические ошибки.
Код AS3:
				var s:Sprite = new Sprite();
				s.graphics.beginFill(0);
				s.graphics.drawRect(i,0,newwidth,newheight);
				s.graphics.endFill();
				buldarray[countbuildings] = s;
__________________
Reality.getBounds(this);

Старый 11.08.2012, 00:17
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Wolsh, так Object динамический. Без кастования должно работать вполне себе нормально. Без автокомплита, но будет работать.
__________________
тут я

Старый 11.08.2012, 01:03
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 10  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
КорДум прав, я допустил ошибку. Присваивание проходит отлично, у меня в коде допущена ошибка - вместо buildarray объявленного, я написал buldarray.

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

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

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


 


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


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