Форум 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=111808)

priroda 08.05.2008 18:10

движение рисунка под маской влево/вправо не выходя за границы
 
Господа флэшеры, прошу о помощи.
Я уже спрашивала об этом, но так и не могут мне помочь. Да и сама разобраться не могу.

Дан рисунок длинной больше *2 чем маска под которой он лежит.
У меня не получается сделать так, чтоб при отводе из рамки - плавное движение продолжалось до той координаты, на которой вышли за пределы рамки. И ещё очень важно - когда посылаем мышь в правый/левый конец рамки(но не выходим за него) - картинка должна дойти до своего конца(не дальше), чтоб не было пустого пространства. т.е. чтоб не уезжала дальше чем надо.

Всё вроде понятно как сделать когда описываешь так подробно. Но данное действие как мне советовали лучше делать так как я уже сделала(см. исходник). Но какие либо правильные преобразования я не могу туда внести. Очень жду от Вас помощи и советов

Psycho Tiger 08.05.2008 18:38

Пардон, можно несколько уточнений?
Цитата:

Дан рисунок длинной больше *2 чем маска под которой он лежит.
Звездочка означает "в"?
Цитата:

У меня не получается сделать так, чтоб при отводе из рамки - плавное движение продолжалось до той координаты, на которой вышли за пределы рамки.
Если я правильно понял, когда мышь уходит ЗА рамки мы больше не скролируем?
Самый простой способ (но не самый быстродейственный):
Код:

mc.onEnterFrame=function():Void{
if (this.hitTest(_xmouse,_ymouse,false)){
//тогда крутим
}
}

Цитата:

И ещё очень важно - когда посылаем мышь в правый/левый конец рамки(но не выходим за него) - картинка должна дойти до своего конца(не дальше), чтоб не было пустого пространства. т.е. чтоб не уезжала дальше чем надо.
Ну тут уже надо взять листик, бумажку и подумать. Вот куда рыть:
Если выровнять скролируемый мувик (относительно его центра) по левому краю, и рамку так же, то:
При _х рамки == _х мувика это левая граница. Есть граница - можно составить условие, куда мы не можем уйти двигая рамку
При _х мувика == ширине рамки мы имеем правый край. Есть граница - можно составить условие, куда мы не можем уйти двигая рамку.
Большим помочь не могу, ибо убегаю. Удачи.

Mnilionic 08.05.2008 21:24

считаем коэффициент соотошения ширины маски к ширине картинки
при движении мышки по области маски считаем dx картинки относительно dx маски используя полученный коэффициент + разница между шириной картинки и маски.

priroda 09.05.2008 17:14

to "psycho tiger" - когда отводим, скрол не прекращается. иначе движение будет обрывистым - в этом одна из проблем.
to Mnilionic - ваши слова похожи на истину. Дело в том что всё это крутится и в моей голове. Написала сюда - хочется немного конкретнее. с логикай у меня всё в порядке пока. Проблема в реализации.
так же надеюсь услышать советы и пожелания тех, кто уже встречался с такой задачей. Прошу Вас, не проходите мимо

Mnilionic 09.05.2008 23:15

Задавайте конкретные вопросы, что именно не получается?

priroda 10.05.2008 00:03

Mnilionic Хорошо. Вот ситуация с которой я не могу справиться. Я представляю себе логически как это реализовать, но синтаксически с помощью AS - не получается. слишком много должно быть всего связано


каким то образом надо выяснить размеры маски. вопрос - каким? и как это потом соотносить с дальнейшим передвижением мувика под маской? -> (можно усложнить задачу и пытаться сделать формулу для загружаемого swf под эту маску, что бы работало правильное движение будь то в 1,5 раза больше маски или в 5, НО Я К ЭТОМУ пока не стремлюсь. Это Очень сложно, я понимаю)
И по-этому размер "рисунка" под маской будет фиксированным(и все координаты можно подогнать.)

Необходимо чтоб отводя от маски курсор - движение не прекращалось а каким то образом с помощью функции "запомнить координату" и продолжать медленное на уменьшение движение до данной координаты.

Ведём мышь влево - мувик с рисунком двигается вправо и наоборот. именно так. я ничего не напутала.

Мне кажется, надо сделать несколько функци которые бы отслеживали _наведение_ на маску _отведение_, ну и функцию самое главное, которая бы отвечала за правильное* движение.

*Дело в том что движение может быть либо очень резким вначале либо очень заторможенным. Но ведь и может быть "растянутым" относительно всей длинны мувика под маской. Вот про эту растянутость я и говорю как правильное.

Да, звучит всё очень сложно..

PS НЕ получается это всё написать на языке програмирования

Мне правда очень сложно одной разобраться. Очень вас прошу

Mnilionic 10.05.2008 00:26

маска делается програмно. маскируемый_клип.setMask(клип_маска);
размеры получаются елементарно (свойства _width, _height)
рабейте задачу на этапы:
сначала сделайте чтоб просто картинка под маской каталась за мышкой.
потом добавте плавности перемещения картинки
//

Создайте мувиклип.
Внутри него создайте ещё два мувика:
1. mc_mask - клип с маской
2. mc_image - клип с картинкой

скрипт для ФРЕЙМА:
Код:

// устанавливаем картинку и маску в нулевые координаты
mc_image._x = 0; mc_image._y = 0;
mc_mask._x = 0; mc_mask._y = 0;
// делаем маску
mc_image.setMask(mc_mask);
// получаем широты
var w_image = mc_image._width;
var w_mask = mc_mask._width;

дальше считайте коэффициент и пишиту функцию, которая будет двигать картинку за мышкой.

priroda 10.05.2008 00:51

Даа, на этом моя логика заканчивается. Я просто не имею представления каким образом использовать эти "широты". Как?

т.е. если я поняла правильно - речь идет об коэфиценте? Вопрос как его использовать. Ну и получить конечно его не мешает мне. Я просто правда немного не понимаю, как это сделать

Mnilionic 10.05.2008 01:21

Заете что такое масштаб? видели карты? там внизу иногда подписывают 1:2000
это и есть коэффициент - означает, что на один сантиметр карты приходится 2000см местности.
То бишь проведя пальцем на 3см по карте мы укажим путь на местности в 6000см

тут у Вас тоже самое: маска - это карта, картинка - это местность
нам нужно узнать на сколько двигать картинку если знаем насколько подвигали мышку по маске.

коэффициент - это соотношения одного чего-либо к другому, в данном случае широт картинки и маски
k = ширина_картинки / ширина_маски
, но так как у нас соотношение идёт относительно не точки, а отрезка (ширина маски, тоесть левая сторона маске соответсвует левой стороне картинки, а правая правой), то к равен:
Код:

var k = (w_image - w_mask)/w_mask;
теперь для того чтоб узнать на какую координату сдвигать картинку, нужно координату мышки (в момент когда она над маской) умножить на полученный коэффициент.

priroda 10.05.2008 13:43

Mnilionic Здравствуй.
Я попробовала сделать всё что было сказано.
Но что то помоему в коэфиценте не так. Почему то изображение не хочет двигаться до конца влево и доконца вправо.
Посмотри пожалуйста свф.
Что очень странно - координаты х на 00, а при набоде на маску - картинка смещается в минус и фиксируется там.

(я обновила файл в первом своём сообщении)

crc 10.05.2008 14:24

Вложений: 1
Для решения данной задачи нужно минимальное знание математики и немного логики, и если столь несложные задачки вызавают вопросов на 50 строчек... И проблема ваша вовсе не во флэшевой реализации, а в составлении алгоритма, советую задуматься.

А, да, вот примерчик сделал. 4 строки кода и две формулы...

priroda 10.05.2008 18:45

Смотрите что получилось. Я сделала перемещение)
Проблема вот в чём: вот доведите мышью до конца маски, выдите за пределы, сдвиньте мышь обратно в область маски с самого края. ДЕЛО В ТОМ что перемещение рисунка под маской начинается пропорционально всей ширины _рисунка_. А я так понимаю надо сделать сравнение скорости перемещения(реагирования) относительно ширины _маски_. Т.е. чем ближе к центру _маски_ тем движение ГАСНЕТ. Также гаснет и когда мышью водишь скраю этой маски.

Вы понимаете о чём я?


to crc. как оказалось такой пример, кот. выложили вы - не вызавает трудностей. Я сделала как оказалось позже известно тоже самое только на основе подсказок Mnilionic'a.
Спасибо конечно, всё оч. красиво, но это лишь промежуточный рез-т. Причём уже достигнутый.
Главная задача - составить правильный алгоритм скорости. Мне сложно, поэтому и обращаюсь за помощью к тем, кто имеет с этим дело и знает чем мне помочь.

Может мне стоит спросить об алгоритме? Наверняка вы видели подобные движения моему описанию.

Mnilionic 11.05.2008 00:56

priroda, ваша прикреплённый фаил куда-то делся.. его нету в первом сообщении.

по поводу скороси.. у Вас перепутались два варианта решения задачи:
1. когда мышка задаёт координату перемещения - маска является проекцией картинки с точным масштабом (левая точка маски == левая точка картинки и так же с правыми)
2. когда мышка задаёт скорость прокрутки - в центре маски скорость прокрутки ровна 0, а чем ближе к краю маски тем скорость выше.

я вам обьяснял первый вариант.

priroda 11.05.2008 15:37

Вложений: 1
Да, вот второй вариант - то что нужно. Я понимаю что делать это никто не захочет - но может кто то уже встречался с данной задачей. Вот ко второму мне и хотелось бы придти. Не уделите мне еще немного своего времени,Mnilionic - дадите пару рекомендаций, практических? Ведь мы уже так близко)

Mnilionic 11.05.2008 17:23

В вашем примере именно "Первый вариант"

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

ищите центр маски, задавайте поля "тормажения"

priroda 11.05.2008 18:59

так и что потом с этим делать?
Как это всё в одну формулу "заталкать"

Mnilionic 11.05.2008 23:34

ненужно ничего толкать.
нужно придумать очерёдность действий на бумажке.
а потом написать скрипт.

сидите думайте.

KoLar 11.05.2008 23:46

Формулы можно взять из физики :)

Aisaid 12.05.2008 14:54

priroda, может вам подойдёт такой вариант ?:
http://www.sephiroth.it/tutorials/flashPHP/scrollRect/

priroda 12.05.2008 18:36

Именно! Чёрт возьми! извините, я вообще не ругаюсь. Я.. А это не actionscript3? у меня flash8

Кстати физика - это прекрасно) когда знаешь куда смотреть) и как смотреть, что бы это увидеть)
Aisaid, у меня ошибку. Выдаёт.

Код:

Classes may only be defined in external ActionScript 2.0 class scripts.
    class Slider2

Скажите что это означает?
PS Mnilionic, я бы правда на бумажке и близко такого не написала. А ведь это то что мне нужно.

Aisaid 12.05.2008 19:27

Вложений: 1
классом пользоваться очень просто, вот пример

priroda 30.05.2008 00:27

Aisaid, спасибо

Хочу спросить кое что ещё. не могу разобраться сама.
Дело в том что, работа в отдельном текстовом док-те меня сильно сбивает с толку. Я не могу сообразить в каком месте надо прописывать выгузку картинки. если мне это понадобится.
точнее каким образом написать эту операцию?

и еще, в каком месте можно описать прелоадер на загрузку картинки?
т.е. в slide3.as или в самом flash? но если в slide3.as то как туда обратиться. к конкретной функции. может я чтото не понимаю, и всё немного легче.
подскажите пожалуйста

Aisaid 30.05.2008 15:29

priroda, в slide3.as вам лезть незачем, если не знаете что хотите там править... :)
писать весь код желательно в первом кадре таймлайна - вам же легче будет. (хотя на самом деле никаких правил на этот счёт нету)
в примере видно как загружается картинка, таким же образом вместо картинки можно загружать мувиклип (swf) и он будет скролится и работать в этом окошке...
чтобы удалить обьект скролирования по моему нужно писать: delete имя_вашего_скролла;
удачи

priroda 30.05.2008 23:14

да да да, кстати я у же поэксперементировала и научилась всталять свф.
вот а по поводу delete.
писала delete Slide3 | delete www2 | что только не писала - не удаляет. может надо unLoadMovie? только я не знаю куда это писать

PS пожелав удачи, это значит как бы всё?)

Aisaid 02.06.2008 20:00

priroda, я пользовался этим классом в мувиках которые загружались, а потом полностью выгружались, да и вообще не приходилось удалять созданное классами (я с ними, классами, не очень дружу)
поэксперементировав немного пришёл к выводу, что пока неизвестен другой метод нужно пользоваться анлоадМуви...

п.с. удачи можно желать и не прощаясь, вы не знали? :)

priroda 03.06.2008 16:10

Вложений: 1
вам надо это скачать и прочесть в первом кадре

ps ..ну теперь знаю)


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

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