Форум 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)
-   -   goToAndPlay, scene. Трабл (http://www.flasher.ru/forum/showthread.php?t=151970)

AHKHOBA 09.03.2011 19:09

goToAndPlay, scene. Трабл
 
Неожиданно столкнулась с проблемой перехода на другую сцену из клипа.
Структура такая: есть несколько сцен. На первой лежит клип, в котором кнопка, при нажатии на которую должен осуществляться переход на другую сцену. Однако не работает. Что меня удивляет, даже запись вида:
Код AS1/AS2:

on (press) {
  _root.gotoAndPlay("Scene 2", 1);
}

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

Подскажите, как справиться с этой тонкостью, пожалуйста.

iNils 09.03.2011 19:12

Цитата:

Неожиданно столкнулась с проблемой перехода на другую сцену из клипа.
Запись вида gotoAndPlay (сцена, кадр) работает только из основного таймлайна, из клипов она не работает.

AHKHOBA 09.03.2011 19:26

да, это я уже поняла. Но должен же быть другой путь?.. Вы знаете?

mooncar 09.03.2011 19:29

Вообще не пользоваться сценами - это неудобно и неправильно с т.зр. организации проекта.
От них уходят сразу после знакомства с флешем.

AHKHOBA 09.03.2011 19:33

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

mooncar 09.03.2011 19:51

Тогда попробуйте так. На главном таймлайне организуйте функцию вида
Код AS1/AS2:

function goNext(scene:String, frm:Number)
{
  gotoAndPlay(scene, frm);
}

Код в кадре, разумеется.

И вызывайте ее откуда угодно:
Код AS1/AS2:

_root.goNext('Scene 2', 1);


AHKHOBA 09.03.2011 19:55

а может можно средствами actionscript выполнить команду, заданную строкой?

Насколько я помню, в некоторый языках за это отвечала функция eval (которая во флеше какую-то другую роль выполняет). Было бы так, если бы работала:
Код AS1/AS2:

_root.command = 'gotoAndPlay("Scene 11", 1)';
eval(_root.command);

ну а есть вместо eval такая функция в actionscript?

mooncar 09.03.2011 19:57

А чем мое решение не устраивает? Собственно то, что вы пытаетесь сделать с eval (которая тут вряд ли поможет), давно и прочно делается с помощью функций.

AHKHOBA 09.03.2011 19:58

Цитата:

Сообщение от mooncar (Сообщение 979051)
Тогда попробуйте так. На главном таймлайне организуйте функцию вида
Код AS1/AS2:

function goNext(scene:String, frm:Number)
{
  gotoAndPlay(scene, frm);
}

Код в кадре, разумеется.

И вызывайте ее откуда угодно:
Код AS1/AS2:

_root.goNext('Scene 2', 1);


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

mooncar 09.03.2011 20:03

Цитата:

Сообщение от AHKHOBA (Сообщение 979055)
да пробовала же. Не нравится компилятору, что я сцену в виде переменной задаю - без кавычек. Ругается, и все портит

Да, я ясно. Беда с этими сценами. Увы, не знаю, как быть.

iNils 09.03.2011 20:43

Цитата:

ну а есть вместо eval такая функция в actionscript?
Нет. Eval выполняет туже роль, что и в JS, только возможности ее урезаны. Связано это с тем, что код JS интерпретируется самим бразуером, а AS поступает флеш-плееру в виде скомпилированного байт-кода, и если бы eval обладал теме же возможностями, что и в JS, то в плеер пришлось бы встраивать компилятор.

Bred45 18.01.2012 22:59

Столкнулся с этой же проблемой.
Решение так и не нашлось? :(

mooncar 18.01.2012 23:29

Сожалею, но решение - не надо пользоваться сценами. С ними только неудобства, пользы ноль.

crazyone 19.01.2012 03:45

Насколько я знаю, сцены в ас2 нигде не сохраняются, а все вызовы типа gotoAndStop("Scene 2",4); меняются компилятором на gotoAndStop(<Scene 2 firstframenum>+4)); поэтому можно сделать что-то похожее - при старте посчитать первые кадры сцен и потом считать - куда переходить. Правда переходы будут не по имени, но все равно проще.

Сделать это можно как-нибудь так:

Код AS1/AS2:

var scenesStartFrames:Array;
onLoad=function(){
        scenesStartFrames=[];
        i=0;
        var prevSceneStart:Number;
        do{
                prevSceneStart=_currentframe;
                scenesStartFrames.push(prevSceneStart);
                nextScene();
        }while(prevSceneStart!=_currentframe)
        gotoAndStop(1);
}
 
function gotoAndStopScene(scene:Number,frame:Number){
        gotoAndStop(scenesStartFrames[scene]+frame);
}
function gotoAndPlayScene(scene:Number,frame:Number){
        gotoAndStopScene(scene,frame);
        play();
}

А вобще конечно сцены - кака.

Ugodniki 31.08.2012 17:03

Решение существует!
Заходим в свойства кадра на который будет переход и даем ему имя (например - vera). Теперь пишем gotoAndStop("vera") вместо неработающего gotoAndStop("Scene 2",4), и воаля - работает!

mooncar 31.08.2012 21:45

Пора уже забыть про "сцены" - это тупиковый и неудобный функционал. Да и теме уже больше года. Закрыто.


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

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