Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   метод движения (http://www.flasher.ru/forum/showthread.php?t=65914)

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/tutorial...ng/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

Цитата:

Сообщение от Nirth
Код:

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

Цитата:

Сообщение от Nirth
Разбор полетов
Код:

//Импортируем нужные нам библиотеки, дабы не писать путь полностью,
//да и читабильность возрастает
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

Цитата:

Сообщение от Nirth
это надо писать в первом кадре а ты где пишешь?

Наверное во втором :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 кадров) ну так выведи формулу, или вправду лучше юзай пример силина


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

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