Просмотр полной версии : метод движения
Помогите создать метод движения точки в определенные координаты.
Метод должен принимать координаты X,Y, имя объекта который надо двигать и скорость. Сложность в том, что надо двигать объект с определенной скоростью, при этом прийти в четко указанные координаты.
Еще сложность в том, что двигать, объект надо не зависимо от EnterFrame, для этого надо использовать setIntrval который надо будет остановить по прибытии в указанные координаты, а флаг о прибытии получить неоткуда.
В общем, выглядеть все должно так:
Я щелкаю куда угодно, и точка начинает ехать туда, куда я кликнул с указанной заранее скоростью.
Если в то время когда точка едет в указанные ранее координаты, я кликну в другом месте, она должна начать ехать к новым координатам.
pl_move_to_coord(player:String, coordX:Number, coordY:Number, speed:Number):Void {
}
Может быть, у кого нибудь есть готовая функция движения, выложите пожалуйста :)
И че вам все выдумывать да выдумывать, создавать...сделано уже все
//Создаем Мувик
_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);
общая схема
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);
}
Кстати вот по этой ссылке есть очень клевый тутор по системе easing'ов
http://www.actionscript.org/tutorials/intermediate/Tweening/index.shtml
ого, как все не сложно :d
спасибо всем..
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 0,50,20);
где сложно? одна строчка всего...это ведь классы, в них не нужно копаться просто нужно юзать ;)
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 0,50,20);
где сложно? одна строчка всего...это ведь классы, в них не нужно копаться просто нужно юзать ;)
Я постараюсь разобратся, только я еще не знаю как я буду это делать, ты мне показал так как тебе понятно, мне не понятно :(
А вот с примером silinа покопаюсь :) - это похоже то что я хотел, мне главное чтоб ресурсы компа меньше всего тратились...
Разбор полетов
//Импортируем нужные нам библиотеки, дабы не писать путь полностью,
//да и читабильность возрастает
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);
Разбор полетов
//Импортируем нужные нам библиотеки, дабы не писать путь полностью,
//да и читабильность возрастает
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);
Всё это радостно, однак нет самого главного -
ответа на вопрос:
"Если в то время когда точка едет в указанные ранее координаты, кликну в другом месте, она должна начать ехать к новым координатам."
У Сила есть.....
Просто доработать....
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);
};
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);
};
Ну так ведь нам никто и не мешает поизвращаться =)
Прикола ради, получаееться достаточно забавный примем, при использовании 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);
};
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.*;
Как я понял, нельзя импортировать что то вовнутрь класса или интерфейса...
это надо писать в первом кадре а ты где пишешь?
это надо писать в первом кадре а ты где пишешь?
Наверное во втором :D
я думал при вызове метода :)
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 всегда двигался с одинаковой скоростью.
ханзо бог зачем наделил тебя мозгами? ты видишь что последний параметр это время(в нашем случае это 20 кадров) ну так выведи формулу, или вправду лучше юзай пример силина
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.