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

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

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

Регистрация: Aug 2012
Сообщений: 108
Flame Оптимизация

Посоветуйте, какие методы для следующих задач оптимальны?

1)Задача: в классе-потомке нарисовать спрайт так, чтобы он перекрывал остальные (был поверх всех).
Методы решения:
а) диспатчить эвент, передавать спрайт наверх, отрисовывать в мейне (main)
б) делать супером (вряд ли нормально сработает при n-й вложенности потомка)
в) каким-то образом забирать/передавать stage/root

2)Как работают следующие методы и какой наиболее оптимален в случае: привести переменную к строке?
var i:int
a)"" + i
b)i.toString()
c)String(i)
d)i as String

Старый 23.10.2012, 17:38
C4Grey вне форума Посмотреть профиль Отправить личное сообщение для C4Grey Найти все сообщения от C4Grey
  № 2  
C4Grey

Регистрация: May 2007
Сообщений: 181
Отправить сообщение для C4Grey с помощью ICQ Отправить сообщение для C4Grey с помощью Skype™
1. Когда-то тестировал, самый производительный метод - банально выполнить addChild(), в данном сулчае - в stage.
2. С чисто эстетической точки зрения - метод b. Последний метод стоит использовать если нужно проверить, удается ли интерпритировать тиа как строку(получим null, если это не так, но в случае с int, который, впрочем, внутри плеера все равно приводится к Number, конвертация всегда будет успешной).

Старый 23.10.2012, 17:38
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
a)"" + i
b)i.toString()
c)String(i)
d)i as String
Это все одно и тоже , скорость если и отличается , то на 1 миллионную. Давайте еще 0 в числах с плавающей точкой принебрегать , .5 вместо 0.5 - это же профит!
А как удобно читать в массивах [ .1 , .2, .3 , .4 , .5 ] смак!
__________________
Марк Tween

Старый 23.10.2012, 17:43
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 4  
Psijic

Регистрация: Aug 2012
Сообщений: 108
Цитата:
Сообщение от in4core Посмотреть сообщение
Это все одно и тоже , скорость если и отличается , то на 1 миллионную. Давайте еще 0 в числах с плавающей точкой принебрегать , .5 вместо 0.5 - это же профит!
А как удобно читать в массивах [ .1 , .2, .3 , .4 , .5 ] смак!
Конечно, мы ими будем пренебрегать и делать вместо for (i++) - (i--) потому что в обратном порядке быстрее, а функции Math вообще жрут дофига
А вообще, как бы по ООП вроде считается кошерным использовать .toString, хотя там бывает надо ставить лишние скобки иначе он выдает function. String - простой тип данных вообще, а вот например, про Object я читал, что лучше использовать o as Object, т.к. Object(o) может выдать ошибку

По 1му поводу - передал root статиком и к нему подцепил (вариант в)

PS кстати, этим тут кто-нибудь пользуется?


Последний раз редактировалось Psijic; 23.10.2012 в 17:57.
Старый 23.10.2012, 18:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Давайте еще 0 в числах с плавающей точкой принебрегать , .5 вместо 0.5 - это же профит!
Вроде компилятор это в один и тот же байткод переводит, или я чего-то не знаю?

i.toString(), насколько помню, работает значительно медленнее String(i);

Цитата:
А как удобно читать в массивах [ .1 , .2, .3 , .4 , .5 ] смак!
Удобно, нули не мешают

Цитата:
Конечно, мы ими будем пренебрегать и делать вместо for (i++) - (i--) потому что в обратном порядке быстрее
Если бы. Вызов length там основную роль играет, а не порядок.
Цитата:
, а функции Math вообще жрут дофига
функции Math действительно жрут дофига, в критических местах стоит писать a > 0 ? a : -a вместо Math.abs()
( конечно, надо понимать, что запись object.getValue() > 0 ? object.getValue() : -object.getValue() будет медленнее чем Math.abs(object.getValue()) - лишний вызов функции или обращение к геттеру съест всю экономию)

Цитата:
а вот например, про Object я читал, что лучше использовать o as Object, т.к. Object(o)
Часто нужно чтобы вывалилось исключение при приведении того, что не ожидалось. Тут от ситуации надо думать.


Последний раз редактировалось expl; 23.10.2012 в 18:21.
Старый 23.10.2012, 18:29
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
2)Как работают следующие методы и какой наиболее оптимален в случае: привести переменную к строке?
var i:int
a)"" + i
b)i.toString()
c)String(i)
d)i as String
Нужно еще учитывать тип данных этой переменной. Методы A и B будут всегда работать одинаково (по крайней мере я еще не встречал ситуаций, где это было бы не так), может быть я ошибаюсь.
А вот касательно B и D все будет иначе.
as String - это приведение к типу "строка", тогда как String(i) - это конвертация типов. Приведение не всегда сработает. Можно на практике убедиться, что as String не всегда сработает не выкинув ошибку.
toString() вообще может возвращать что угодно в виде строки. Можно переопределить этот метод в своем классе и написать туда хоть [object Vasya Pupkin]

Так что здесь все относительно. Лично я пользуюсь конкатенацией со строкой. Реже явной конвертацией String(нужное значение);

Старый 23.10.2012, 19:19
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 7  
Psijic

Регистрация: Aug 2012
Сообщений: 108
а еще я так понял, super - это глючный метод когда много классов, и вообще костыль.

Кстати, такая конструкция оптимальна? Нельзя ли упростить?

Код AS3:
public class Main extends Sprite
{
  public static var mainRoot:DisplayObject;
 
  public function Main():void
  {
    mainRoot = root;
  }
}
Другой класс
Код AS3:
var mainRoot = Main.mainRoot as Object
И надо ли писать void после public function Main()? По умолчанию он его не выдает

Старый 23.10.2012, 19:23
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
А что по-вашему super ?
__________________
hauts.ru

Старый 23.10.2012, 20:07
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
var mainRoot = Main.mainRoot as Object
Код AS3:
var mainRoot = Main as Sprite;
И это дурацкая практика, так никто не делает
__________________
Марк Tween

Старый 23.10.2012, 21:14
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Psijic Посмотреть сообщение
а еще я так понял, super - это глючный метод когда много классов, и вообще костыль.
Отсюда помедленнее, пожалуйста, я записываю.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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