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

_LennY_ 13.09.2011 07:08

Как "запомнить" выбранный мувик ?
 
Вложений: 1
Доброго времени суток, Форумчане !

У меня такой вопрос. Как проще описать процедуру "запоминания" и прорисовки мувиклипа ?


Вот мои действия :

1. В первом кадре создаю три мувиклипа, называю их S1 (круг), S2 (квадрат), S3 (элипс). Там же в кадре пишу код проверки :

Код AS1/AS2:

stop();
// Выбираем нужный мувик и рисуем его в следующем кадре
onMouseDown = function():Void {
if (S1.hitTest(_root._xmouse, _root._ymouse))
{
gotoAndStop(2);
}
if (S2.hitTest(_root._xmouse, _root._ymouse))
{ 
gotoAndStop(3);
}
if (S3.hitTest(_root._xmouse, _root._ymouse))
{
gotoAndStop(4);
}
}

2. Во втором третьем и четвёртом кадре рисую выбранный мувик и выбираю второй мувик

Код AS1/AS2:

S = 1; // переменная для запоминания первого мувика
stop();
// Выбираем нужный мувик и рисуем его в следующем кадре
onMouseDown = function():Void {
if (S1.hitTest(_root._xmouse, _root._ymouse))
{
SS = 1; // переменная для запоминания второго мувика
gotoAndStop(5);
}
if (S2.hitTest(_root._xmouse, _root._ymouse))
{
SS = 2; // переменная для запоминания второго мувика
gotoAndStop(5);
}
if (S3.hitTest(_root._xmouse, _root._ymouse))
{
SS = 3; // переменная для запоминания второго мувика
gotoAndStop(5);
}
}

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

Код AS1/AS2:

// проверяем чему равен первый и второй мувик, и, в зависимости от этого,
// рисуем их
 
if (S == 1) // если первый мувик равен "кругу"
{        if (SS == 1) // и если второй мувик равен кругу то рисуем круг и круг
{ gotoAndStop(6); }
if (SS == 2) // и если второй мувик равен квадрату то рисуем круг и квадрат
{ gotoAndStop(7); }
if (SS == 3) // и если второй мувик равен элипсу то рисуем круг и элипс
{ gotoAndStop(8); }
}
if (S == 2) // если первый мувик равен "квадрату"
{        if (SS == 1) // и если второй мувик равен кругу то рисуем квадрат и круг
{ gotoAndStop(9); }
if (SS == 2) // и если второй мувик равен квадрату то рисуем круг и квадрат
{ gotoAndStop(10); }
if (SS == 3) // и если второй мувик равен элипсу  то рисуем круг и элипс
{ gotoAndStop(11); }
}
 
if (S == 3) // если первый мувик равен "элипсу"
{        if (SS == 1) // и если второй мувик равен кругу то рисуем элипс и круг
{ gotoAndStop(12); }
if (SS == 2) // и если второй мувик равен квадрату то рисуем элипс и квадрат
{ gotoAndStop(13); }
if (SS == 3) // и если второй мувик равен элипсу то рисуем круг и элипс
{ gotoAndStop(14); }
}

Получается что я горожу "большой огород", который растёт в геометрической прогрессии, а ведь ещё надо как то описывать и третий мувик ...
Как мне лучше справиться с этой проблемой ?
Буду признателен за любые идеи и мысли, исходник прилагаю.

dark256 13.09.2011 13:30

Опишите вкратце, чего вы имеете хотеть достигнуть?

Котяра 13.09.2011 13:50

Избавьтесь от кода во многих кадрах. если уж пишите в кадрах - пишите ТОЛЬКО В ПЕРВОМ

mooncar 13.09.2011 13:54

Отступы делайте табуляцией в функциях, условных операторах.. везде. Плохо код читается.

Что касается оптимизации кода, то имя мувика или ссылка на него может быть составным, с использованием переменных.
Например, в приближении к вашему случаю:

Код AS1/AS2:

this.onMouseDown = function  () 
{
        for (i = 1; i < 10; i++)
        {
                var mc:MovieClip = _root['s' + i];
                if (mc.hitTest(_root._xmouse, _root._ymouse))
                {
                        ....
                        gotoAndStop(i + 1);
                }
        }
};

И прислушайтесь к предыдущим постам.

_LennY_ 14.09.2011 04:41

Вложений: 1
Всем спасибо за посты

Цитата:

dark256
Опишите вкратце, чего вы имеете хотеть достигнуть?
В идеале хотелось бы извоять игру "Память". Т.е. есть поле 4х4 из 16ти карт, которые лежат "рубашкой" вверх и четыре разновидности картинок (например круг, квадрат, прямоугольник, элипс) Каждой карте рандомно присваевается одна из картинок. при нажатии на любую карту на поле она переворачивается и показывает свою картинку. При нажатии на вторую любую карту, она тоже переворачивается, и если картинки совпадают - карты удаляются, если не совпадают - карты "закрываются обратно" .(на всякий случай, для тех кто не понял, прикрепляю подобную игру от АртМедиа)

Цитата:

Котяра
Избавьтесь от кода во многих кадрах. если уж пишите в кадрах - пишите ТОЛЬКО В ПЕРВОМ
В том то и проблема =) Как бы это всё дело засунуть в первый кадр, и, по возможности, уменьшить число фреймов и вес самого исходника... Есть предположение, что можно например это всё реализовать при помощи цикла, который будет автоматически загонять данные в массив, и потом брать данные оттуда, но как это сделать ? - незнаю, так как ёще начинающий флешер .

Цитата:

mooncar
Отступы делайте табуляцией в функциях, условных операторах.. везде. Плохо код читается.
Спасибо, учту =)

Цитата:

mooncar
Что касается оптимизации кода, то имя мувика или ссылка на него может быть составным, с использованием переменных.
Например, в приближении к вашему случаю:
Да, кстати, то что нужно. Я хотел изначально сделать так, чтобы цикл задавал переменные мувикам, но не разобрался как это написать.

Жду ещё предложений.

mooncar 14.09.2011 10:46

Начните с того, что откажитесь от фреймов. Они тут и в аналогичных случаях не нужны. Фреймы во флеше использовать следует для анимации.
Пишите код в 1-м кадре, и все объекты тоже разместите в 1-м кадре и управляйте в определенные моменты их видимостью с помощью _alpha или _visible. Либо добавляйте из библиотеки с помощью attachMovie и удаляйте с помощью removeMovieClip,

_LennY_ 14.09.2011 12:48

Цитата:

mooncar
Либо добавляйте из библиотеки с помощью attachMovie и удаляйте с помощью removeMovieClip,
А можно по подробнее с конкретным рабочим примером, если не сложно... Как это реализовать ?

Например если кликнуто по клипу - attachMovie на его позицию другой клип.... Если ещё раз кликнуто - removeMovieClip

dark256 14.09.2011 13:30

Генерите двумерный массив с картами. Допустим 10 на 10
Генерите на его основе 10 на 10 кнопок. В одном кадре.
Под каждую кладете клип-фигуру и делаете ему _visible = false
И все.

Клик по кнопке - показываем что там под ней скрыто - круг, квадрат али ишшо что.
Запомнили фигуру в переменной

var selectedFigure = 1..2

Кликаете по второй кнопке. Сравниваете тип лежащей там фигуры с открытой.
Далее либо оставляете открытыми фигуры, либо обе закрываете.

И никаких кадров.

_LennY_ 22.09.2011 11:29

dark256, А можно пример на двух картах хотя бы ? А то я уже плотно погряз в создании массивов, присвоении видимости, и переменных... никак не могу дойти...

_LennY_ 26.09.2011 10:38

Может кто-нибудь ещё поделиться своим мнением ? Желательно с примером =)


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

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