![]() |
|
||||||||||
|
|||||
|
Регистрация: 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);
}
}
}
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. Сорри за громоздский код)) |
|
|||||
|
ты обращаешься к несуществующиму объекту acceleration.
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Имена классов должны начинаться с прописной буквы.
з.Ы. А где свойство acceleration у класса? |
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
СПАСИБО ОГРОМНОЕ!
насколько глупо)) а компилятор не выдал ошибки из-за с-ва dynamic, верно? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
dynamic — зло. Его применять нужно только там, где его применение действительно необходимо.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|