Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2009, 15:15
dmitriev вне форума Посмотреть профиль Отправить личное сообщение для dmitriev Найти все сообщения от dmitriev
  № 1  
Ответить с цитированием
dmitriev
 
Аватар для dmitriev

Регистрация: Jun 2007
Адрес: Челябинск
Сообщений: 303
Отправить сообщение для dmitriev с помощью ICQ
Question Движение по кривой программно

[IMG]http://img297.**************/img297/874/55132851vq9.th.jpg[/IMG]

Черные линии примерно описывают предполагаемую траекторию.
Как добиться "такого" небольшого искажения прямой траектории?
__________________
O God! The Aftermath.

Старый 16.01.2009, 16:10
ENDrain вне форума Посмотреть профиль Отправить личное сообщение для ENDrain Найти все сообщения от ENDrain
  № 2  
Ответить с цитированием
ENDrain
 
Аватар для ENDrain

Регистрация: Jan 2009
Адрес: 70 ю.ш., 90 в.д.
Сообщений: 20
Отправить сообщение для ENDrain с помощью ICQ
Код AS1/AS2:
function myFunction(a, b, c, d):Void {
    // a - величина отклонения по оси x
    // b - велечина отклонения по оси y
    // c и d - для отслеживания порога отклонения, изначально должны бать равны
    if (c == d) {
        // Пока порог не достигнут
        двигаемыйОбъект._x /*или что там*/+= a;
        двигаемыйОбъект._y += b;
    } else {
        двигаемыйОбъект._x -= a;
        двигаемыйОбъект._y -= b;
    };
    if (y /*или*/x == с /*или*/d) {
        c /*или*/d = любое другое значение;
    };
};
Нужна еще одна функция, которая будет изменять координаты по прямой, но это уже просто. Ее нужно поставить на частый интервал, а эту - на интервал пореже. Тогда, вроде бы, должно получиться.
Раньше с координатами толком не работал, так что если сморозил какую-нибудь глупость...
__________________
(nLauthing.time.sec == 60) ? nLife.time.hours++ : break;

Старый 16.01.2009, 16:14
dmitriev вне форума Посмотреть профиль Отправить личное сообщение для dmitriev Найти все сообщения от dmitriev
  № 3  
Ответить с цитированием
dmitriev
 
Аватар для dmitriev

Регистрация: Jun 2007
Адрес: Челябинск
Сообщений: 303
Отправить сообщение для dmitriev с помощью ICQ
Я на самом деле не понял ничего) Думаю как то проще можно, по крайней мере в одну функцию.
__________________
O God! The Aftermath.

Старый 18.01.2009, 04:16
thrash_er вне форума Посмотреть профиль Отправить личное сообщение для thrash_er Найти все сообщения от thrash_er
  № 4  
Ответить с цитированием
thrash_er
[+1 18.01.09]

Регистрация: Mar 2006
Сообщений: 29
возможно для такой анимации подойдет fuse kit

пример


Последний раз редактировалось thrash_er; 18.01.2009 в 06:14.
Старый 18.01.2009, 06:35
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Как то раз собрались 4 флешера и стали долго и упорно обсуждать эту тему... =)
В общем, пришли вот к какому выводу:

- пишем функция, высчитывающую координаты точек
- сохраняем эти точки в массив (можно 2 массива - для _x и для _y)
- пишем функцию onEnterFrame или setInterval и меняем координаты клипа на те, что в массиве

Хотите посмотреть - смотрите (лучше сразу последнюю страницу)
очень длинная тема
__________________
...вселенская грусть

Старый 23.01.2009, 15:58
ENDrain вне форума Посмотреть профиль Отправить личное сообщение для ENDrain Найти все сообщения от ENDrain
  № 6  
Ответить с цитированием
ENDrain
 
Аватар для ENDrain

Регистрация: Jan 2009
Адрес: 70 ю.ш., 90 в.д.
Сообщений: 20
Отправить сообщение для ENDrain с помощью ICQ
Так, до меня дошло, что я написал полную ахинею ))
Значит, сначала переменные:

Код AS1/AS2:
var nA:Number = 5; // Смещение по одной оси (в данном случае - x)
var nB:Number = 15; // Максимальное отклонения от прямой по другой оси
var nCounter:Number = 0; // Счетчик, следящий за отклонением
var bEnd:Number = 0; // Переключатель, следящий за тем же
//В принципе, они могут быть заключены в массив, но это уж на чей вкус
И одна-единственная функция:

Код AS1/AS2:
function имяФункции(a, b):Void {
		mcMC._x += a;
// Здесь та ось, по которой движение постоянно
		(bEnd == 0) ? mcMC._y += b-nCounter : mcMC._y -= b-nCounter;
// Здесь проверяется, дошла ли кривая до максимальной точки отклонения; в зависимости от этого, x идет либо вниз, либо вверх
		(bEnd == 0) ? (nCounter < b) ? nCounter++ : bEnd = 1 : nCounter--;
// То же самое, но с nCounter - он постепенно увеличивается и уменьшается, обеспечивая плавность
		if(nCounter == 0) {
			clearInterval(nInterval);
// Когда объект вернулся на исходную x - прекратить.
		}
}
__________________
(nLauthing.time.sec == 60) ? nLife.time.hours++ : break;

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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