Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.09.2011, 22:22
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 1  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
По умолчанию Случайный цвет из 256 цветовой палитры

Мне необходимо сделать так, что бы квадрат имел цвет только из 256 цветов цветовой палитры. Если писать
Код AS3:
Math.random()*0xFFFFFF
то выводит случайный цвет из 16 миллионов, мне же необходимо, случайный цвет из 256 цветов. Как такое можно реализовать?
__________________
Humanity.push(new Man());

Старый 26.09.2011, 01:16
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 2  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Код AS3:
Math.random()*256

Старый 26.09.2011, 01:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
trng, будет 257 цветов (про ноль не забываем)
Код AS3:
uint(Math.random()*0xFF)
__________________
Reality.getBounds(this);

Старый 26.09.2011, 01:46
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 4  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
да. сорри. поспешил

Старый 26.09.2011, 02:39
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
trng прав!
Math.random()*1 никогда 1 не даст =)
А теперь по теме:
Код AS3:
var rand256:uint = uint(Math.random()*0x100); //никогда не будет 256!
var color:uint = ((rand256 & (7 << 5)) << 16) | ((rand256 & (7 << 2)) << 11) | ((rand256 & 3) << 6);//похоже на 3-3-2 RGB
//вообще-то это не он, но нормально делать мне лень
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 26.09.2011 в 02:54.
Старый 26.09.2011, 02:48
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 6  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Цитата:
Сообщение от -De- Посмотреть сообщение
trng прав!
Math.random()*1 никогда 1 не даст =)
А теперь по теме:
Код AS3:
var rand256:uint = uint(Math.random()*0x100); //никогда не будет 256!
var color:uint = ((rand256 & (7 << 5)) << 16) | ((rand256 & (7 << 2)) << 8) | ((rand256 & 3) << 0);//3-3-2 RGB
Как бы и да и нет:
random():Number
[статические] Возвращает псевдослучайное число n, где 0 <= n < 1.


Что будет при округлении (в итоге-то нужно целое) я не уверен.


Последний раз редактировалось trng; 26.09.2011 в 02:54.
Старый 26.09.2011, 02:53
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 7  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
trng, округление через Math.round(value); и через приведение к типу uint отличаются.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 26.09.2011, 02:56
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 8  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
trace(uint(0.99999999 * 1.0)); // равно нулю

Добавлено через 1 минуту
trace(Math.round(0.99999999 * 1.0)); // один конечно

Добавлено через 4 минуты
вот ответ:

uint () функция
public function uint(value:Number):uint
Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 1.0, Flash Player 9, Flash Lite 4
Преобразует данное числовое значение в целочисленное значение без знака. Десятичные значения усекаются до целых чисел.
Пример: Положительное число с плавающей запятой uint(5.31) Усеченное целое число без знака (например, 5)



Так что я таки прав.
Спасибо, -De-, TanaTiX!


Последний раз редактировалось trng; 26.09.2011 в 03:05.
Старый 26.09.2011, 03:10
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Тут ещё вот на что смотрите - каждое число от 0 до 255 должно быть равновероятно. Ну т.е. допустим надо вам получить число 0, 1, или 2, равновероятно.
Код AS3:
var saves:Array = [0, 0, 0];
for(var i:int = 0; i < 1000000; ++i) {
  var rand:int;
  //rand = int (Math.round(Math.random()*3));// выводит 166649,333558,333634,166159 - фигня
  //rand = Math.round(Math.random()*2);// выводит 250178,499918,249904 - фигня
  rand = int (Math.random()*3);// выводит 333553,332836,333611 -всё верно, цифры близки, так и надо писать
  ++saves[rand];
}
trace(saves);
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 26.09.2011, 04:19
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 10  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Цитата:
//rand = Math.round(Math.random()*2);// выводит 250178,499918,249904 - фигня
Совершенно верно.
При таком синтаксисе (округление) вероятность единицы в 2 раза выше чем у (крайних) нуля или двойки.
0: на входе Math.round() должно быть от 0 до 0.49(9)
1: на входе Math.round() должно быть от 0.5 до 1.49(9)
2. на входе Math.round() должно быть от 1.5 до 2

Для int (Math.round(Math.random()*3)) ситуация аналогичная


Последний раз редактировалось trng; 26.09.2011 в 04:21.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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