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

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

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

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
По умолчанию Непонятная ошибка

Привет. Чтобы потренироваться,решил создать "модель"(очень приблизительную) движения тела вокруг точки,являющейся источником поля(в данном случае - сила всемирного тяготения). При этом создал два класса - vector и rock. Первый определяет алгебраический вектор и его сумму. Второй отвечает за поведение самого "камня" - его движение и постоянное обновление его скорости и ускорения. Вот собственно сами классы:

Код:
package main
{	
	import main.vector;
	import flash.display.*;
	import flash.events.*;
	import flash.utils.Timer;
		
	dynamic public class rock extends MovieClip
	{
		public static var X:Number=250;    //координаты центра
		public static var Y:Number=250;    //тяжести
		public static var MASS:Number = 300;//и его масса	

		public var _acceleration:vector = new vector(); //ускорение
		public var _speed:vector = new vector();        //скоость
		

		var rock_timer:Timer =  new Timer(100,0);
		public function rock()
		{
                	this.x = 100;           //начальные координаты
                	this.y = 100;
                	this._speed._x = 0;     //начальная скорость
                	this._speed._y = 5;
                	this.acceleration._x=0; //-"- ускорение
                	this.acceleration._y=0;
                	rock_timer.addEventListener(TimerEvent.TIMER, update); // обработчик событий для таймера
                	rock_timer.start();                                    // запускаем таймер

                						
		}
		public function update(e:TimerEvent)   //обновление координат,скорости,ускорения иела
		{
			_speed  = vector.sum(_speed,_acceleration); //  - скорость
			this.x += _speed._x;
			this.y += _speed._y;
			var vec:vector = new vector(X-x,Y-y);
			var acc:Number = 0.000000067*MASS/(vec._x*vec._x+vec._y*vec._y); //модуль ускорения
			if(vec._x*vec._x+vec._y*vec._y != 0)        //высчитываем координаты ветора ускорения
			{
				if(vec._x==0)
				{
					_acceleration._x=0;
					_acceleration._y = acc;
				}
				else if(vec._y==0)
				{
					_acceleration._y=0;
					_acceleration._x = acc;
				}
				else
				{
					_acceleration._x = acc/Math.sqrt(vec._x*vec._x+vec._y*vec._y)*vec._x;
					_acceleration._y = acc/Math.sqrt(vec._x*vec._x+vec._y*vec._y)*vec._y;
				}
			}
		}
		
	}

}
Код:
package main
{

	public class vector
	{
		public var _x:Number;
		public var _y:Number;
		public function vector(setx:Number = 0, sety:Number = 0)
		{	
			_x = setx;
			_y = sety;

		}
		static public function sum(v1:vector,v2:vector):vector
		{
			return new vector(v1._x+v2._x,v1._y+v2._y);                				
		}
	}
}
синтаксических ошибок нет,однако в панели output вылетает сообщение:
TypeError: Error #1010: A term is undefined and has no properties.
at main::rock$iinit()
at flash.display::Sprite/flash.display:Sprite::constructChildren()
at flash.display::Sprite$iinit()
at flash.display::MovieClip$iinit()

В чес проблема? Заранее спасибо.

P.S. Сорри за громоздский код))

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

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
ты обращаешься к несуществующиму объекту acceleration.
Цитата:
this.acceleration._x=0;
this.acceleration._y=0;
Код:
this._acceleration._x=0;
this._acceleration._y=0;

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

Регистрация: Sep 2002
Сообщений: 30,787
Имена классов должны начинаться с прописной буквы.

з.Ы. А где свойство acceleration у класса?

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

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
СПАСИБО ОГРОМНОЕ!
насколько глупо))
а компилятор не выдал ошибки из-за с-ва dynamic, верно?

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

Регистрация: Sep 2002
Сообщений: 30,787
dynamic — зло. Его применять нужно только там, где его применение действительно необходимо.

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

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

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


 


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


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