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

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

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

Регистрация: Dec 2014
Сообщений: 312
По умолчанию Неточные координаты DisplayObject

Почему 0.7 + 0.1 = 0.75?
Вместо двух твипов прибавился один.

Код AS3:
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _bitmap = new Bitmap();
            addChild(_bitmap);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
        }
 
        private function enterFrame(e:Event):void
        {
            _bitmap.y += 0.1;
            trace(_bitmap.y);
        }
 
        private var _bitmap:Bitmap;
    }
}

Результат команды trace
Код AS3:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.75
0.85
0.95
...

Старый 28.01.2015, 20:24
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ага. И если 9 / 3 можно получить 2.9999. Мы просто с этим живем.

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

Регистрация: Oct 2005
Сообщений: 157
согласно документации тип Number это число двойной точности (IEEE-754 double-precision floating-point number) дальше кури мануал как складываются такие числа, отсюда скорее всего и вылазит 0.7+0.1 = 0.75

вот статья на вики как отправная точка https://ru.wikipedia.org/wiki/%D0%A7...81%D1%82%D0%B8
и вот для расширения кругозора https://en.wikipedia.org/wiki/IEEE_f...#Basic_formats

на пальцах объяснить я не смогу, наверное =)

Добавлено через 18 минут
вот взгляни что это за числа на самом деле:
Код AS3:
trace((0.7).toPrecision(21));
trace((0.1).toPrecision(21));
trace((0.7 + 0.1).toPrecision(21));
 
//output
//0.699999999999999955591
//0.100000000000000005551
//0.799999999999999933387
__________________
и где же смысл?


Последний раз редактировалось vadja; 28.01.2015 в 22:11.
Старый 28.01.2015, 22:41
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
согласно документации тип Number это число двойной точности (IEEE-754 double-precision floating-point number) дальше кури мануал как складываются такие числа, отсюда скорее всего и вылазит 0.7+0.1 = 0.75
Да нет, с Number такой отвратительной точности не получится, тут где-то недавно похожая тема была
Если коротко, то надо делать так и всё будет отлично:
Код AS3:
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _bitmap = new Bitmap();
            addChild(_bitmap);
 
            _bitmapY = 0;
            addEventListener(Event.ENTER_FRAME, enterFrame);
        }
 
        private function enterFrame(e:Event):void
        {
            _bitmapY += 0.1;
            _bitmap.y = _bitmapY;
            trace(_bitmap.y + "(" + _bitmapY + ")");
        }
 
        private var _bitmapY:Number;
        private var _bitmap:Bitmap;
    }
}

Старый 28.01.2015, 23:07
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 5  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Спасибо

Старый 31.01.2015, 02:14
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Координаты экранных объектов принудительно округляются до 0.05, вот и вся магия.
__________________
Поймай яблоко 2!

Старый 31.01.2015, 02:51
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 7  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Координаты экранных объектов принудительно округляются до 0.05, вот и вся магия.
Нене, уолш говорил, что они "аттачатся к сетке", а сетка располагается не ровно каждые 5 сотых, а немного другого масштаба.
__________________
There is no thing in this world that is not simple.

Старый 31.01.2015, 02:55
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
1/20 пикселя — 0.05
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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