Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   логика построения кода (http://www.flasher.ru/forum/showthread.php?t=210052)

Nikem79 21.01.2015 09:56

логика построения кода
 
Добрый день! Пытаюсь понять логику построения кода. Опыт только 20-летней давности по basic.

Гуглил синтаксис AS читаю http://www.lessonsflash.ru/ и пытаюсь одновременно тестировать, но так и не могу разобраться что за чем должно следовать и как привязывать переменные к мувикам.

На данный момент имею: два мувика "мальчик", "девочка" на каждом есть кадры "стоит", "говорит", "поднимает руки".

1) Создал кнопки "кнстоит", "кнговорит", "кнруки",
2) с помощью "фрагментов кода" добавил код

Код AS3:

кнговорит.addEventListener(MouseEvent.CLICK, кнопкаговорит);
 
function кнопкаговорит(event:MouseEvent):void
{
девочка.gotoAndPlay("говорит");
}

и так далее по всем действиям

далее создал ещё две кнопки "кнмальчик" и "кндевочка"

задача: по нажатию на кнопку "кнмальчик" говорить по кнопке "говорит" должен мальчик, а не девочка. Как задать и присвоить переменную действию gotoAndPlay("говорит"); ?

Или есть какие-то более рациональные решения?

Есть ли энтузиасты готовые помочь, разъяснить логику построения кода новичку?.. А то даже эти фрагменты кода не могу оптимизировать, потому что не понимаю как...

Wolsh 21.01.2015 11:51

Ну создайте переменную-флаг isBoy:Boolean, и скажем ее значение true будет "мальчик", а false — "девочка".
При нажатии на кнопки "мальчик/девочка" устанавливайте значение этой переменной в true/false соответственно.
При нажатии на кнопки "говорит/руки/стоит" в обработчике проверяете значение флага isBoy и в зависимости от него переводите соответствующий мувик на нужный кадр.
Ну как-то так:
Код AS3:

function кнопкаговорит(event:MouseEvent):void
{
        if (isBoy)
        {
                мальчик.gotoAndPlay("говорит");
        }
        else
        {
                девочка.gotoAndPlay("говорит");
        }
}

Добавлено через 5 минут
Другой вариант — создайте переменную acter:MovieClip, в которой сохраняйте ссылку на мувиклип мальчика или девочки в зависимости от нажатий кнопки "мальчик/девочка", а в обработчике кнопок действия просто переводите клип по ссылке на нужный кадр:
Код AS3:

acter.gotoAndPlay("говорит");

Естественно, для этого клипы мальчика и девочки должны быть устроены одинаково — иметь одинаковые метки.

Nikem79 21.01.2015 13:20

Да, вот второй вариант более подходит, потому что кроме мальчиков и девочек, планируется бабушек и дедушек и т д.

Только как сохранить ссылку на мувиклип?


Код AS3:

var currentPersone:MovieClip;
 
currentPersone = ("девочка"); //по умолчанию
 
currentPersone.gotoAndPlay();

Пытаюсь что-то вроде этого сделать, но не работает. Мне хотябы просто запустить мувик используя переменную... В первом кадре девочки стоит stop()

Добавлено через 2 часа 55 минут
то есть, по сути мне нужно будет из кода обращаться к разным instance name мувиков для размещения их в главный ролик и проигрывания разных кадров... Как это можно осуществить?

Добавлено через 2 часа 59 минут
нашёл вот такую тему http://flasher.ru/forum/showpost.php...3&postcount=58 но не понимаю, как при помощи неё решить мою задачу...

olexandr 21.01.2015 19:56

я бы написал здесь поуниверсиальнее с помощью словаря:
Код AS3:

var hash:Dictionary = new Dictionary();
hash[boy] = boySays;
hash[girl] = girlSays;
 
boy.addEventListener(MouseEvent.CLICK, clickHandler);
girl.addEventListener(MouseEvent.CLICK, clickHandler);
 
function clickHandler(e:MouseEvent):void{
    var animation:MovieClip = hash[e.target] as MovieClip;
    animation.gotoAndPlay();
}


Wolsh 21.01.2015 23:07

olexandr, Вам бы вопрос прочитать внимательней. Хотя, для установки актера пойдет. Только, боюсь, для ТС это пока слишком запутано.

Цитата:

currentPersone = ("девочка"); //по умолчанию
Не надо шаманизма.
Код AS3:

currentPersone = девочка;


Nikem79 22.01.2015 08:07

Я в шоке! ))

Заработало! При чём и обращаться теперь могу к этому мувику!

Код AS3:

var currentPersone:MovieClip;
 
currentPersone = девочка; //по умолчанию
 
currentPersone.gotoAndPlay(3);

сутки гугления не помогли разобраться) Огромное спасибо!)


olexandr, скорее всего ваш код более гибкий и удобный в использовании, но для меня действительно сложноват пока :( Спасибо за помощь. Надеюсь я к нему ещё вернусь в будущем)

Добавлено через 5 часов 46 минут
а как можно обратиться к нужному звуку в зависимости от параметров? Что бы загнать основной сюжет в функцию

Код AS3:

var currentPosition = 3; // Номер сцены сюжета (Выбранный персонаж должен сказать "пока"
var ГолосПерсонажа:Sound = new мальчикговорит3(); //Объявляем звук "пока" голосом мальчика в библиотеке
var currentPersone:MovieClip; // Объявляем переменную выбранного персонажа
 
currentPersone = мальчик;
 
function deystvie();
    {
        currentPersone.gotoAndPlay("говорит");
        currentPersone говорит 3 .play(); // Эту строку не догоняю как правильно написать, нужен звук голосом мальчика "пока"
    }

Добавлено через 28 часов 25 минут
Таки ап, решения пока что так и не нашёл...

olexandr 23.01.2015 12:50

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

Nikem79 23.01.2015 13:22

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

Например, есть два звука
devochkaPrivet с названием класса devPrivet
и malchikPrivet с названием класса malPrivet

Код AS3:

import flash.media.Sound;
 
var devochkaPrivet:Sound = new devPrivet;
var malchikPrivet:Sound = new malPrivet;
 
currentPersone = девочка;
 
... .play();

В зависимости от значения currentPersone звучит привет голосом девочки или мальчика

ZackMercury 23.01.2015 14:36

Цитата:

Пытаюсь понять логику построения кода.
Хотите научиться кодить - забудьте про таймлайн до того момента, пока вы сами не поймёте, как сделать было бы проще всего. Учите язык.
Скачайте FlashDevelop, он бесплатный. (При установке поставьте галочку на загрузке и установке Flex SDK)
И книжку по AS3, например, Колина Мука.

А ещё советую обратить внимание на то, как вы называете переменные и методы, классы, константы.
Между программистами существуют общие моральные устои правила оформления кода. Т.е. конвенции об названии переменных и функций, классов, пакетов.

Например, принято использовать английский язык для всех имён переменных/классов, никаких девочек. Только girl/boy.
Никаких devochka, вас самих не раздражает подобное написание?
girl/boy.

Имена классов принято начинать с upper-case буквы, и каждое отдельное слово писать в верхнем регистре.
Имена методов принято начинать с lower-case буквы, и каждое последующее слово писать в верхнем.
Имена методов должны состоять из глаголов(что сделать) (start/play/remove/add/connect/find и т.д.)
Имена переменных оформляются так же, как и имена методов, за исключением того, что состоять должны из существительного.
(health, girl, boy, chat, dialog и т.д.)
Ещё принято при создании экземпляра оставить скобки.
Код AS3:

var girl:Girl = new Girl();

Приватные переменные принято начинать с андерскора(_health, _girl, _boy)(Если не знаете, что значит приватная переменная - проигнорируйте и читайте книжку Мука).

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

Nikem79 23.01.2015 17:36

Спасибо за ценные советы. Однако интерес должен подогреваться результатами, в процессе обучения внедряю полученные знания, но возникают вопросы на которые не получается найти ответы в инете. В общем, интерес пропадает если обучаться только на предложенных преподавателем примерах...

ответа на вопрос о переменных звука пока так и не нашёл... Хотелось бы такое же простое решение как в предыдущем посте от Wolsh

Цитата:

Не надо шаманизма.

Код AS3:

currentPersone = девочка;




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

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