Кажется, баг с отрисовкой

Pixilang по русски
Post Reply
spectrum_hyena
Posts: 4
Joined: Sun Mar 22, 2020 12:37 am

Кажется, баг с отрисовкой

Post by spectrum_hyena »

В общем, понадобилось мне разбить экран на плитку, в процессе словил следующий результат
Image

Долго не мог понять в чем дело, смотрел свой криворукий код, но так ничего не нашел. А потом я посмотрел не только на отрисованную часть, а на экран в целом и, кажется, понял.

Image

В верхней правой части экрана, у нас горизонтальные полосы создаются, в нижней левой - вертикальные, ну а в верхней левой они пересекаются.

Ну или это все же я делаю что-то не так, вот код:

Code: Select all

c = 30

bSize = WINDOW_YSIZE / c

tiles = new(2, c, INT)
tiles[0,0] = (WINDOW_XSIZE / -2) + bSize
tiles[1,0] = (WINDOW_YSIZE / -2) + bSize

i = 1
while i < (c){
	tiles[0,i] = tiles[0,(i-1)] + bSize
	tiles[1,i] = tiles[1,(i-1)] + bSize
	i = i + 1
}

i = 0
while i < c{
	j = 0
	while j < c{
		fbox(tiles[0,i], tiles[1,j], bSize, bSize, RED)

		j = j + 1
	}
	i = i + 1
}
frame(9999)
spectrum_hyena
Posts: 4
Joined: Sun Mar 22, 2020 12:37 am

Re: Кажется, баг с отрисовкой

Post by spectrum_hyena »

Только что выяснил, что если развернуть окно на весь экран и запустить, то такого не происходит, все работает нормально, при просто смене размера окна баг остается. Macbook pro 2013, macos mojave 10.14.3
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Кажется, баг с отрисовкой

Post by NightRadio »

Это происходит из за ошибки округления при переводе из FLOAT в INT вот здесь:
tiles[0,i] = tiles[0,(i-1)] + bSize
tiles[1,i] = tiles[1,(i-1)] + bSize
В данном случае FLOAT переводится в INT самым простым способом: убирается все цифры после запятой.

Как решить:
1) bSize = WINDOW_YSIZE / c заменяем на bSize = WINDOW_YSIZE div c
2) fbox(tiles[0,i], tiles[1,j], bSize, bSize, RED) заменяем на fbox(tiles[0,i], tiles[1,j], bSize-1, bSize-1, RED)
spectrum_hyena
Posts: 4
Joined: Sun Mar 22, 2020 12:37 am

Re: Кажется, баг с отрисовкой

Post by spectrum_hyena »

Оп, спасибо, сам бы я никогда не догадался
spectrum_hyena
Posts: 4
Joined: Sun Mar 22, 2020 12:37 am

Re: Кажется, баг с отрисовкой

Post by spectrum_hyena »

Спустя месяц-полтора я нашел более подходящее решение проблемы:
tiles = new(2, c, INT) заменить на tiles = new(2, c, FLOAT)

Не будьте как я, читайте документацию, да почаще.
Post Reply