Возможно, ошибка в элементе PaintBox, помогите это исправить:
code_26864.txt
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | code_26864.txt [972B] [97] |
Ответов: 3889
Рейтинг: 362
|
|||
login, PaintBox тут не при чём, "прыжок" происходит из-за отрицательных координат на входе Img_Rectangle.
|
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, а почему? как это исправить?
Ато обьекты дергаются перед тем как заехать за левую границу. |
|||
карма: 0 |
|
Ответов: 1376
Рейтинг: 197
|
|||
карма: 1 |
| ||
файлы: 1 | code_26865.txt [1.1KB] [110] | ||
Голосовали: | login |
Ответов: 3889
Рейтинг: 362
|
|||
login, нет там никакой мистики для опытного программиста, знающего, что отрицательные числа в бинарном виде выглядят как заполненные единицами в старших разрядах. Так как в старших разрядах лежит координата Y, забитая единицами она считается за -1, убедитесь сами:
code_26866.txt ------------ Дoбавленo в 11.10: А вот и способ это "исправить"
|
|||
карма: 1 |
| ||
файлы: 1 | code_26866.txt [1KB] [90] |
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, спасибо, а можно это в Delphi сделать?
Я посмотрел в элементе формирования точки и пишу в delphi-код такое: res := ReadInteger(word(Y shl 16) + word(X)); Не компилируется. Что я делаю не так? Error: Operator not applicable to this operand type
Error: Invalid typecast Не хочется такое количество рассчетов выносить за пределы FTCG, и не хочется применять условие "if" (if используется в операторе "and") |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login, он же Вам пишет, типы не совпадают. Например, бинарный сдвиг пытаетесь применить к левому типу, например, hiEvent.
login писал(а): а можно это в Delphi сделать?Так, вроде, в паскале есть бинарный оператор AND. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Да, есть бинарный AND:
res := (X and 65535) + Y; Error: Operator not applicable to this operand type
не компилируется, а как правильно надо писать? |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): res := (X and 65535) + Y;Если X и Y верхние точки, то вот так должно прокатить
А тебе не кажется, что X и Y надо поменять местами |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco,
hiFTCG_Tools_8EAC570.pas(585) Error: Incompatible types: 'THI_Event' and 'Real'
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login, к Real нельзя применять AND, только к Cardinal и Integer
------------ Дoбавленo в 11.55: login писал(а): Incompatible types: 'THI_Event' and 'Real'Все правильно, я же написал конкретно nesco писал(а): Если X и Y верхние точки |
|||
карма: 22 |
|
Ответов: 3889
Рейтинг: 362
|
|||
res := (ToIntegerEvent(X) and 65535) or (ToIntegerEvent(Y) shl 16);
|
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, nesco, перевел X и Y в integer стало компилировать обычные: "(%1 shl 16) + %2" и "(%1 and 65535) + %2"
Сейчас разбираюсь почему на выходе ничего нет. ------------ Дoбавленo в 12.15: (%2 shl 16) + %1 - работает но края всеравно "подпрыгивают". (%2 and 65535) + %1 - Работает но координаты выдает такие что на поле ничего нет, где-то далеко за пределами поля. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login, блин, я же показал формулу:
(%1 and 65535) or (%2 shl 16) |
|||
карма: 1 |
| ||
Голосовали: | login |
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, сорри я просто тупой, не понял. Эта формула заработала как надо! СпасибО!
|
|||
карма: 0 |
|
15