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

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

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

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
По умолчанию При создании экземпляра пользовательского класса возникает ошибка

Здравствуйте!
Помогите в проблеме. Есть два класса первый MyRectangle создает прямоугольник и заставляет его двигаться. Как только прямоугольник доходит границы окна приложения он начинает двигаться в другую сторону.

Код AS3:
package main {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class MyRectangle extends Sprite{
		var Rect:Shape=new Shape();		
		private var HMove:Boolean=true;			//Переменные, которые определяют направление
		private var VMove:Boolean=true;			//по горизонтали или вертикали
		private var speed:Number=10;
 
		public function MyRectangle() {
 
			drawRectangle(0xFF9900);
			addChild(Rect);
 
			addEventListener(Event.ENTER_FRAME,frameListener);
 
 
			function frameListener(e:Event):void{
 
				//Перемещение вправо
				if(HMove==true){
					trace("X: "+Rect.x);
					if(Rect.x<=stage.stageWidth-stage.width){
						Rect.x+=speed;
						//e.updateAfterEvent();
					}else{
						HMove=false;
					}
				}
 
				//Перемещение влево
				if(HMove==false){
					trace("X: "+Rect.x);
					if(Rect.x>stage.x){
						Rect.x-=speed;
					}else{
						HMove=true;
					}
				}
 
				//Перемещение вверх
				if(VMove==true){
					trace("Y: "+Rect.y);
					if(Rect.y<=stage.stageHeight-stage.height){
						Rect.y+=speed;
						//e.updateAfterEvent();
					}else{
						VMove=false;
					}
				}
 
				//Перемещение вниз
				if(VMove==false){
					trace("Y: "+Rect.y);
					if(Rect.y>stage.x){
						Rect.y-=speed;
					}else{
						VMove=true;
					}
				}				
			}
 
			//Ф-ция рисует прямоугольник
			function drawRectangle(color:Number):void{
				Rect.graphics.lineStyle(1);
				Rect.graphics.beginFill(color,1);
				Rect.graphics.drawRect(0,0,75,40);
 
			}
 
		}
	}
}
Второй класс Brush объявляет переменную figura1.
Код AS3:
package main  {
	import flash.display.*;	
	import main.MyRectangle;
 
 
	public class Brush extends Sprite{
		public var figura1:MyRectangle;
		public function Brush() {
			figura1=new MyRectangle();		
		}
	}	
}
Когда пытаюсь в переменную записать экземпляр класса MyRectangle, происходит ошибка

Код:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
	at Function/<anonymous>()
Помогите разобраться где я не прав.

Старый 21.05.2010, 13:21
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 2  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
вроде так
Код AS3:
var Rect:Shape=new Shape();
нельзя писать. Попробуйте написать в конструкторе.

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

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Не возникнет ли проблем потом когда будет вызываться функция drawRectangle()?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Зря Вы запихали все функции в конструктор. Вложенные функции - зло.
2. Зачем вообще создавать новый Шейп где-то кроме drawRectangle() ? Держите связанный код вместе, зачем его раскидывать по всему классу.
3. Имена переменных пишутся с маленькой буквы. С большой - только названия классов и интерфейсов (ну и конструкторов соответственно)
__________________
Reality.getBounds(this);

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

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Цитата:
1. Зря Вы запихали все функции в конструктор. Вложенные функции - зло.
2. Зачем вообще создавать новый Шейп где-то кроме drawRectangle() ? Держите связанный код вместе, зачем его раскидывать по всему классу.
3. Имена переменных пишутся с маленькой буквы. С большой - только названия классов и интерфейсов (ну и конструкторов соответственно)
Спасибо приму к сведению. И все-таки, что скажите об ошибке? Что она означает и что я не так сделал.?

Старый 21.05.2010, 14:59
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
поправьте вот так:
Код AS3:
public class MyRectangle extends Sprite{
		private var Rect:Shape;
 
......
 
		public function MyRectangle() {
 
                        Rect = new Shape();
 
			drawRectangle(0xFF9900);
			addChild(Rect);
Возможно заработает

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

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Цитата:
Сообщение от OnEg1n Посмотреть сообщение
Спасибо приму к сведению. И все-таки, что скажите об ошибке? Что она означает и что я не так сделал.?
В вашем случае Вы из элементарной задачи сделали мегакод, который не работает. В программировании чем проще, тем лучше.

Сделайте примерно так:
Код AS3:
function drawRectangle(color:Number):Shape {
	var result:Shape = new Shape();
 
	result.graphics.lineStyle(1);
	result.graphics.beginFill(color, 1);
	result.graphics.drawRect(0, 0, 75, 40);
 
	return result;
}
 
var rect:Shape = drawRectangle(0xff0000);
addChild(rect);

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

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Спасибо, буду пробывать.

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

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

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


 


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


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