PDA

Просмотр полной версии : метод движения


Hanzo
22.06.2005, 19:59
Помогите создать метод движения точки в определенные координаты.
Метод должен принимать координаты X,Y, имя объекта который надо двигать и скорость. Сложность в том, что надо двигать объект с определенной скоростью, при этом прийти в четко указанные координаты.
Еще сложность в том, что двигать, объект надо не зависимо от EnterFrame, для этого надо использовать setIntrval который надо будет остановить по прибытии в указанные координаты, а флаг о прибытии получить неоткуда.
В общем, выглядеть все должно так:
Я щелкаю куда угодно, и точка начинает ехать туда, куда я кликнул с указанной заранее скоростью.
Если в то время когда точка едет в указанные ранее координаты, я кликну в другом месте, она должна начать ехать к новым координатам.
pl_move_to_coord(player:String, coordX:Number, coordY:Number, speed:Number):Void {
}

Может быть, у кого нибудь есть готовая функция движения, выложите пожалуйста :)

Nirth
22.06.2005, 20:09
И че вам все выдумывать да выдумывать, создавать...сделано уже все

//Создаем Мувик
_root.createEmptyMovieClip("ball_mc",3);
//рисуем кружок
ball_mc.lineStyle(35,0xff6600,100);
ball_mc.moveTo(0,0);
ball_mc.lineTo(0.5,0);
//Двигаем
import mx.transitions.*;
import mx.transitions.easing.*;
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 0,50,20);

silin
22.06.2005, 20:29
общая схема
var v=10,id=0;
mc.onMouseDown=function(){
clearInterval(id);
var x=this._parent._xmouse-this._x,y=this._parent._ymouse-this._y;
var r=Math.sqrt(x*x+y*y),a=Math.atan2(y,x);
x=v*Math.cos(a),y=v*Math.sin(a);
var n=int(r/v),m=this;
if(n)id=setInterval(function(){if(!--n)clearInterval(id);m._x+=x,m._y+=y;updateAfterEvent()},10);
}

Nirth
22.06.2005, 20:32
Кстати вот по этой ссылке есть очень клевый тутор по системе easing'ов
http://www.actionscript.org/tutorials/intermediate/Tweening/index.shtml

Hanzo
22.06.2005, 20:47
ого, как все не сложно :d
спасибо всем..

Nirth
22.06.2005, 21:08
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 0,50,20);

где сложно? одна строчка всего...это ведь классы, в них не нужно копаться просто нужно юзать ;)

Hanzo
23.06.2005, 01:40
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 0,50,20);

где сложно? одна строчка всего...это ведь классы, в них не нужно копаться просто нужно юзать ;)

Я постараюсь разобратся, только я еще не знаю как я буду это делать, ты мне показал так как тебе понятно, мне не понятно :(

А вот с примером silinа покопаюсь :) - это похоже то что я хотел, мне главное чтоб ресурсы компа меньше всего тратились...

Nirth
23.06.2005, 01:56
Разбор полетов

//Импортируем нужные нам библиотеки, дабы не писать путь полностью,
//да и читабильность возрастает
import mx.transitions.*;
import mx.transitions.easing.*;
//переходим к делу,
/*
ball_mc - цель над которой будем извращаеться
None.easeOut - None это класс, для линейного движения, easeOut это просто метод(в данном классе они все одинаковые)
0 - ноль это начальная координата
50- дистанция на которую будем двигаться
20 - продолжительность(в нашем случае в кадрах)
*/
var moving = new Tween(ball_mc, "_x", None.easeOut, 0,50,20);

Штрек
23.06.2005, 02:35
Разбор полетов

//Импортируем нужные нам библиотеки, дабы не писать путь полностью,
//да и читабильность возрастает
import mx.transitions.*;
import mx.transitions.easing.*;
//переходим к делу,
/*
ball_mc - цель над которой будем извращаеться
None.easeOut - None это класс, для линейного движения, easeOut это просто метод(в данном классе они все одинаковые)
0 - ноль это начальная координата
50- дистанция на которую будем двигаться
20 - продолжительность(в нашем случае в кадрах)
*/
var moving = new Tween(ball_mc, "_x", None.easeOut, 0,50,20);

Всё это радостно, однак нет самого главного -
ответа на вопрос:
"Если в то время когда точка едет в указанные ранее координаты, кликну в другом месте, она должна начать ехать к новым координатам."
У Сила есть.....

Штрек
23.06.2005, 02:40
Просто доработать....
import mx.transitions.*;
import mx.transitions.easing.*;
var v = 10, id = 0;
mc.onMouseDown = function() {
var x = this._parent._xmouse, y = this._parent._ymouse;
moving = new Tween(this, "_x", None.easeOut, this._x, x, 20);
moving = new Tween(this, "_y", None.easeOut, this._y, y, 20);
};

Nirth
23.06.2005, 02:51
import mx.transitions.*;
import mx.transitions.easing.*;
this.onMouseDown = function() {
x0 = _root.bb._x;
y0 = bb._y;
x1 = _root._xmouse;
y1 = _root._ymouse;
var xm = new Tween(bb, "_x", Bounce.easeOut, x0, x1, 20);
var ym = newTween(bb, "_y", Bounce.easeOut, y0, y1, 20);
};

Ну так ведь нам никто и не мешает поизвращаться =)

Nirth
23.06.2005, 03:02
Прикола ради, получаееться достаточно забавный примем, при использовании out и in для разных координат
пример 1

import mx.transitions.*;
import mx.transitions.easing.*;
//Создаем Мувик
_root.createEmptyMovieClip("ball_mc",3);
//рисуем кружок
ball_mc.lineStyle(35,0xff6600,100);
ball_mc.moveTo(0,0);
ball_mc.lineTo(0.5,0);
this.onMouseDown = function() {
var xm = new Tween(ball_mc, "_x", Bounce.easeOut, ball_mc._x, _xmouse, 20);
var ym = new Tween(ball_mc, "_y", Bounce.easeIn, ball_mc._y, _ymouse, 20);
};

пример 2

import mx.transitions.*;
import mx.transitions.easing.*;
//Создаем Мувик
_root.createEmptyMovieClip("ball_mc",3);
//рисуем кружок
ball_mc.lineStyle(35,0xff6600,100);
ball_mc.moveTo(0,0);
ball_mc.lineTo(0.5,0);
this.onMouseDown = function() {
var xm = new Tween(ball_mc, "_x", Back.easeOut, ball_mc._x, _xmouse, 2,20);
var ym = new Tween(ball_mc, "_y", Back.easeIn, ball_mc._y, _ymouse, 2,20);
};

Hanzo
23.06.2005, 11:52
Import statements are not allowed inside class or interface definitions.
import mx.transitions.*;

**Error** D:\My Art\Project\Player.as: Line 74: Import statements are not allowed inside class or interface definitions.
import mx.transitions.easing.*;

Как я понял, нельзя импортировать что то вовнутрь класса или интерфейса...

Nirth
23.06.2005, 11:53
это надо писать в первом кадре а ты где пишешь?

KUZEN
23.06.2005, 11:56
это надо писать в первом кадре а ты где пишешь?
Наверное во втором :D

Hanzo
23.06.2005, 11:59
я думал при вызове метода :)

Hanzo
23.06.2005, 12:20
point.onMouseDown = function() {
var x = this._parent._xmouse, y = this._parent._ymouse;
moving = new Tween(this, "_x", None.easeOut, this._x, x, 20);
moving = new Tween(this, "_y", None.easeOut, this._y, y, 20);
};

Если сделать так, получается не так как хотелось бы, чем меньше дистанция тем ниже скорость, и наоборот, а надо чтобы point всегда двигался с одинаковой скоростью.

Nirth
23.06.2005, 12:27
ханзо бог зачем наделил тебя мозгами? ты видишь что последний параметр это время(в нашем случае это 20 кадров) ну так выведи формулу, или вправду лучше юзай пример силина