RU

AeroQSP: баги

Nex Moderator 27.10.2011 04:47 26 comments 19202 views

Сюда записываем баги. Вопросы здесь задавать не нужно, для них есть отдельная тема. Для предложений тоже отдельная.

Экран не прокручивается колесом мыши, если курсор находится над картинкой в тексте.

Не совсем баг, но проблема.
В Windows без предустановленного Flash-плагина для IE не работает AeroShell.

Любопытный баг. Плеер Аэры не выводит конструкцию с ссылкой в виде картинки:

'<a href="EXEC: theme = 2 & gt $curloc"><center><img src="content/right_arrow.png"></center></a>

когда тег CENTER находится внутри блока <a></a>. Если тег вынести за его пределы, все отображается правильно:

'<center><a href="EXEC: theme = 2 & gt $curloc"><img src="content/right_arrow.png"></a></center>

Видимо, проблема связана с особенностями HTML. На урк-канале мне поведали, что неправильно заключать тег CENTER внутри <a></a>, т.к. A - инлайновый элемент, который работает только в пределах картинки. Центрировать ее внутри бессмысленно, надо делать это снаружи.

Я уже не раз говорил об этом баге, но внятного ответа до сих пор не получил.

На этот раз решил показать на простом примере. Скачайте программку и запустите её в аэре.
http://www.sendspace.com/file/a3mxdk

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

Каждая картинка это целиком ссылка. Если разместить одну такую, то можно кликнуть по любой её точке и пройти по ссылке. Но когда их становится несколько возникает странны нарастающий эффек, в результате которого часть областей экрана становится недоступной для клика. В примере по некоторым картинкам кликнуть нельзя вообще, а большинство перекрыты частично. Поводите курсором над ними и увидите по его превращению где какие места.
Тут кликабельные места расположились в основном с краю, но никакой системы я выделить не могу. Единственное что я знаю — если в коде расположить строки дивов в другом порядке, то перекрытия будут другие. Теоретически можно минимизировать выпадающие зоны правильным порядком дивов в коде, но если геометрия сложная и дивов много, идеального порядка найти не выходит. Что-от да выпадает. А это создает огромные трудности при создании графического интерфейса.

Что делать будем?

ЗЫ: Тот же баг проявляется не только при использовании картинок. Чисто текстовые ссылки выпадают по аналогичному принципу.

Судя по всему это особенности отрисовки новых строк в аеро
Поскольку каждый див в примере выводится новой строкой, то они в итоге и перекрывают часть дивов
Как только я в строки с выводом дивов добавил *p, все картинки стали полностью кликабельны
Вообще при работе с HTML лучше всего любые строки с тегами выводить через *p (классики это тоже касается, поскольку в ней переносы строк обычно накапливаются в конце текста - это особенно заметно при выводе таблиц)

werewolf,
наверное это из-за того, что перевод строки формирует тег
.
То есть, написав так

'<div>1</div>'
'<div>2</div>'

Мы получаем

<div>1</div>
<br>
<div>2</div>
<br>

В таком случае спасет действительно только оператор *P.

Круто! Работает.
Вервольф, спасибо огромное.
Ты мой герой ) Но я об этом уже говорил по-моему…

Люди! Я не знаю, может это не баг виноват, а мой мозг, но почему-то у меня глючит Counter в аере. Есть локация с таким кодом:

слагаемое1 = 1
слагаемое2 = 2
слагаемое3 = 3

В counter прописал (как правило, чтобы всегда так было!):

среднее_арифметическое = (слагаемое1 + слагаемое2 + слагаемое3) / 3

Вставил переменную “среднее_арифметическое” куда-нибудь, а она равна нулю!!! :( :(
Вставил вот это:

(слагаемое1 + слагаемое2 + слагаемое3) / 3

И вывелось 2! А мне нужно чтоб именно переменная “среднее_арифметическое” выводилась! Странно, но в классическом плеере все нормально выводится
Надеюсь меня поняли

Вставил переменную "среднее_арифметическое" куда-нибудь

Где соотв. код?

AKA,
скорее всего ты опечатался в названии переменной, когда “вставлял куда-нибудь”. Либо не запустил COUNTER(не присвоил системную переменную $COUNTER). Либо вывод на экран у тебя раньше, чем запуск COUNTER.

Я же предупреждал насчет COUNTER, не нужно в него пихать код просто так. Он предназначен только для крайне редких, специфических случаев. Ты сам себе граблю подложил.

Nex:

Либо не запустил COUNTER(не присвоил системную переменную $COUNTER)

Ну другие коды в Counter работают! Значит счетчик задан правильно!

Nex:

Либо вывод на экран у тебя раньше, чем запуск COUNTER.

Счетчик запускается в самой первой локе, а вывод в 4-ой! (”слагаемые” задаются во 2-ой локе)

Nex:

Cкорее всего ты опечатался в названии переменной, когда “вставлял куда-нибудь”

Я не опечатался (все скопировал). Если код убрать из счетчика и поставить просто кодом в любое другое место, то число выведется! (Это все счетчик виноват! :) )

Nex:

Где соотв. код?

Я просто вставил переменнуюе в “выполнить при посещении”

Nex:

Я же предупреждал насчет COUNTER

Я не знаю когда, но я не видел как ты предупреждал

Nex:

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

Если счетчиком не получится, то как по другому сделать так, чтобы (не важно от обстоятельств) что-то ВСЕГДА было равно чему-то?

И все-равно я считаю что там баг! :P

Можно aqsp файл с демонстрацией ошибки?

для таких вычислений лучше вместо COUNTER воспользоваться отдельной локацией, вызываемой через FUNC

#test
слагаемое1 = 1
слагаемое2 = 2
слагаемое3 = 3
среднее_арифметическое = func('среднее_арифметическое')
-
#среднее_арифметическое
result = (слагаемое1 + слагаемое2 + слагаемое3) / 3
-

в принципе эту функцию можно даже улучшить, убрав зашитые переменные и использовав массивы

#test
слагаемое[] = 1
слагаемое[] = 2
слагаемое[] = 3

среднее_арифметическое = func('среднее_арифметическое', 'слагаемое')
*p среднее_арифметическое 
-
#среднее_арифметическое
!'
	$args[0] - имя массива с данными
!'

copyarr '_average', $args[0]

_i = 0
_length = arrsize('_average')
_sum = 0
:loop
	_sum += _average[_i]
	_i += 1
if _i < _length: jump('loop')
result = _sum / _length
-

werewolf,
Я еще хоть немного (совсем чуть-чуть) понял первый пример, но на второй моих мозгов не хватило :(
Просто я не очень разбираюсь (ну тоесть совсем не разбираюсь) в таких штуках, как:
result, copyarr, jump, func и переменных с подчеркиванием

ну если тебе большая гибкость не нужна, то первого примера вполне хватит
func позволяет вызвать локацию, которая возвращает результат (в отличие от остальных переходов, где нет возвращаемого значения)
а в переменную result (или $result для строк) нужно записать возвращаемое значение

Log in or Register to post comments.