Просмотр полной версии : движение объекта
Luc_i_fer
04.07.2007, 16:14
Задача наипростейшая сам понимаю ... Нужно панорамный объетк плавно перемещать по горизонтали, желательно хаотично, а при нажатии на кнопку - замерал ... всё перерыл ... Если в начале хоть образно знал что надо делать, то сейчас запутался оканчательно. Не моя это эпостафия, но сделать надо - кровь из носа (кому не важно :) ) ...
В общем товарисчи и граждане флэшеры, помогите бедному дядьке с его не лёгким ситуэйшеном :) ...
Дабы не запутать меня окончательно и не тратить свои нервы, выложите примерчик :away:
Некоторый оффтоп: и как вы докатились до такой ситуации?
Mr. Fixit
04.07.2007, 16:38
onEnterFrame = function () {
ran = Math.random ()*3+1;
trace(ran);
obj_mc._x += ran;
};
1.класс Твин(самый простой вариант)
2. _x+onEnterFrame(это очень тяжёлый вариант:))
GreatRash
04.07.2007, 17:08
Народ, а как сделать чтобы клип доезжал до края документа а потом ехал назад? А потом чтоб все заново начиналось?
step = 10;
k = 1;
onEnterFrame = function(){
if(_x<0||_x>Stage.width){
k *= -1;
}
_x += k*step;
}
Luc_i_fer
04.07.2007, 17:24
Некоторый оффтоп: и как вы докатились до такой ситуации?
Да очень просто - влез в эти дебри (абсолютно не знакомые), теперь расхлёбываю :)
onEnterFrame = function () {
ran = Math.random ()*3+1;
trace(ran);
obj_mc._x += ran;
};
Этот код категорически не хочет работать, как и остальные.
Есть догадка, что из за размера... но это сугубо моё несмыслящее представление) ...
Размер 5254х150 пикселей ... - это тот самый злополучный панорамный объект. Сама флешка 600х250 пикселей. Вот он должен плавно размеренно перемещяться, чтобы за один путь - было видно обе его стороны (левая и правая) ... Желательно, чтоб перемещение было хаотчиное (по горизонтале) на время приостанавливаясь и идя дальше. Анимация цикличная ... И управляющаяся одной кнопкой (пауза/старт) ... И не хочет он зараза с места трогаться. Как я его не пытал. Другие объекты - вроде стандартных примеров хотят (кружки, небольшие объеткы), а он сцобако не хочет! ...
_root.createEmptyMovieClip("ball_mc",9);
ball_mc.lineStyle(70,0x000000,800);
ball_mc.moveTo(0,0);
ball_mc.lineTo(05,0);
import mx.transitions.*;
import mx.transitions.easing.*;
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 200,500,200);
Твин получается только рисуя этот кружёк с нуля. Если даже выбрать вот этот код:
import mx.transitions.*;
import mx.transitions.easing.*;
var moving = new mx.transitions.Tween(ball_mc, "_x", None.easeOut, 200,500,200);
Надеюсь правильно его употреьил - он не проходит, даже если присвоить мувику имя ball_mc ...
Да что за ерунда. Вот сейчас кинул копируя код предыдущего поста:
step = 10;
k = 1;
onEnterFrame = function(){
if(_x<0||_x>Stage.width){
k *= -1;
}
x += k*step;
}
И не хрена, даже на долбанных кружках - не получается ... Чтож за руки ...
GreatRash
04.07.2007, 17:25
trace(x); показывает NaN
как так?
Народ, а как сделать чтобы клип доезжал до края документа а потом ехал назад? А потом чтоб все заново начиналось?
почитай про физику идеального маятника
GreatRash
04.07.2007, 19:04
Прочитал, интересная статьтя конечно, но как применить эти формулы?
Т.е. я узнаю период колебания маятника, а дальше что?
sin() - периодическая функция, значит ее можно использовать в данном случае.
_x = kof*sin(a);
В onEnterFrame увелтчиваешь a.
Маятник:
x = xmax*cos(w)*t
w = (2*PI)/T;
T - период
в данном случае аналогично, только менять надо t
GreatRash
04.07.2007, 19:29
нифига не понял
_x = kof*sin(a);
что такое kof?
x = xmax*cos(w)*t
w = (2*PI)/T;
T - период
что такое xmax?
что такое w?
что такое t?
может я не ту статью читал...
Учебники по алгебре и физике возьми.поймёшь что это всё такое
GreatRash
04.07.2007, 19:50
Учебники по алгебре и физике возьми.поймёшь что это всё такое
какую главу смотреть? уж весь учебник перелистывать точно влом :p
по физике смотри учебник за 9 класс(тема "Механические колебания"), по алгебре смотри тригонометрию(хотя то, что я показал предельно понятно)
Luc_i_fer
05.07.2007, 01:32
Господа, я немного разобрался ещё. Но так и не понятны некоторые моменты.
Вот какой код получился:
if (mc._x!=10 & mc._x!=5254) {
//тут идет проверка на то не у края ли картинки
//корейский рендом на направление
if (Math.random()<.14) {
napr = "Left";
} else if (Math.random()>.7) {
napr = "Right";
}
if (napr == "Left") {
scale = 3;
} else if (napr == "Right") {
scale = -6;
}
} else if( mc._x+=0){
mc._x+=5
}else {mc._x-=5}
mc._x += scale;
Это первй кадр, а на втором gotoAndPlay(1);
Ещё раз чего я хотел добиться:
мне нужно было чтобы панорамный объект размером 5254 пикселей в ширину рандомно перемещался по оси Х - в зад и вперёд. Как бы создавая впечатление что двигается камера озаряя эту панораму по всей её ширине, но не заходя за края эрана, тобиш не оголяя края панорамы, чтобы не был виден фон за панорамой. Одновременной с этим также рандомно плавно притормаживая в произвольных местах и останавливаясб на одну, две секунды. Анимация должна быть безконечной. Но так же нужна кнопочка, которая сможет останавливать ролик в том месте где он находится и запускать с того же момента.
Кнопку так и не прикрепил, но да бог с ней, помучаюсь - получится, (она почему то не хочет работать на 2 кадра.) Но главное, что панорама уезжает вообще с экрана и я не знаю как с этим бороться. Люди добрые помогите, а? ;)
Флэшка то что получилось (8 кб) (http://cityart.by.ru/other/panoramaMotion.rar)
"Не равно" не надо, лучше больше-меньше.
А что это за кусок - я не понял его смысл:
.....else if( mc._x+=0){....
Ты не переживай, всё заработает. Просто внимательней надо... думать.
Во-первых, не надо второго кадра. Надо весь этот папирус заключить в _root.onEnterFrame = function() {
.... твой код ....
}
Во-вторых, он у тебя просто дрожать должен с таким кодом.
Ведь на каждый кадр переопределяется напрвление и т.д. движения, т.е. скажем 12 раз в секунду он меняет направление. Улавливаешь?
Продумай механизм.
Вот ты рэндомно вычислил направление. В этом направлении тебе надо двигаться минимум 3 - максимум 8 секунд. Скорость движения должна быть приемлемой для просмотра. Т.е. за пять секунд, скажем, ты можешь уехать не далее, чем на 1500 пикселей. Вычисли рэндом, на сколько пикселей сместиться. Проверяешь, не кончится ли картинка. Если допуск составляет пикселей 100-200, можно и двигаться. Если нет - меняем направление. Дальше задаем плавное нарастающее движение до середины пути, и потом - плавно замедляющееся - до цели.
Формулы везде есть, ищи Замедление например. Дошел - снял флаг "двигаюсь!", снова вычисляешь куда и на сколько. Ну и т.д. Устал писать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.