Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно прописать random'ный переход на кадр (http://www.flasher.ru/forum/showthread.php?t=204122)

Графиня 20.10.2013 16:34

Как правильно прописать random'ный переход на кадр
 
Здравствуйте. В as2 я писала
Код AS1/AS2:

gotoAndStop('l'+random(10));

, где l1, l2 - это были метки кадров, куда нужно было попасть произвольным образом.
Как правильно написать это в as3, пожалуйста, подскажите?

AlexCooper 20.10.2013 16:51

Код AS3:

Math.floor(Math.random()*10)+1

даст числа в интервале 1..10

Графиня 20.10.2013 16:57

А как сделать чтобы именно попадал на те кадры, которые отмечены метками l1, l2, l3?
Или хотя бы в диапазоне только с 12 по 48 кадры?

Akopalipsis 20.10.2013 17:07

Код AS3:

var array:Array = [l1, l2, l3];
var length:int = array.length;
var randomFrame:int = Math.round(Math.random() * length);

И потом используете - вставляете в метод, который кадры выбирает.
Код AS3:

array[randomFrame] as String;


Графиня 20.10.2013 17:14

Цитата:

И потом используете - вставляете в метод, который кадры выбирает.
А как вставить в метод?
Если мне нужно просто чтобы с этого кадра без любых других действий был переход, как это нужно прописать?
В as2 все это одной строчкой прописывалось, а в as3 какие-то сложности на ровном месте, увы (.

AlexCooper 20.10.2013 17:17

Цитата:

Сообщение от Графиня (Сообщение 1149254)
А как сделать чтобы именно попадал на те кадры, которые отмечены метками l1, l2, l3?
Или хотя бы в диапазоне только с 12 по 48 кадры?

Код AS3:

var maxL:Number = 3;
var rand:Number = Math.floor(Math.random()*maxL)+1;
gotoAndStop('l'+rand);


Цитата:

Сообщение от Akopalipsis (Сообщение 1149256)
Код AS3:

var array:Array = [l1, l2, l3];
var length:int = array.length;
var randomFrame:int = Math.round(Math.random() * length);

И потом используете - вставляете в метод, который кадры выбирает.
Код AS3:

array[randomFrame] as String;


Код AS3:

var array:Array = ['l1', 'l2', 'l3'];

Код AS3:

var randomFrame:int = Math.round(Math.random() * length-1);


Графиня 20.10.2013 17:19

AlexCooper, классно, СПАСИБО!!!

AlexCooper 20.10.2013 17:23

а лучше вообще использовать floor, так как крайние границы имеет вдвое меньше вероятности генерации чем другие.
Связанно это с тем Math.round округляет до ближайшего целого числа, т.е. 0.4 округлит к 0, а 0.51 к 1, соответственно при генерации интервала 0..3
Math.round( 0 ... 0.5 ) = 0 (интервал 0.5)
Math.round( 0.51 ... 1.5 ) = 1 (интервал 1.0)
Math.round( 0.51 ... 2.5 ) = 2 (интервал 1.0)
Math.round( 2.51 ... 3.0 ) = 3 (интервал 0.5)

Akopalipsis 20.10.2013 17:31

Полезная информация, Спасибо!

MikroAcse 20.10.2013 22:33

Держите:
Код AS3:

var min:int = 12// минимальный кадр, 1 (единица) - первый кадр
var max:int = 48; // максимальный кадр
var frame:int = Math.random() * (max + 1 - min) + min; // получим число от min до max, x∈[min;max]
gotoAndStop("l" + frame);



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

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