RFO BASIC << 1 ... 8 9 10 11 12 ... 272 >> 15.02.2015 / 04:15 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| А! Значит сперва рисовать всю карту, затем выдерживать кусочек, размерами на один тайл больше, чем помещается на экране, затем плавно скролить, пока не достигнет краю скрытой за экраном группы тайлов, после чего отрисовывать строку и/или столбец за экраном в том направлении, в этом каком было движение. Вопрос. Как тогда отрезать ту часть тайлов, что оказалась за экраном с противоположной стороны от той где дорисовывали тайлы. Это что надо за индексами массива следить постоянно и на опережение рисовать?
|
15.02.2015 / 11:34 | | Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| Цитата oslopov1991: А! Значит сперва рисовать всю карту, затем выдерживать кусочек, размерами на один тайл больше, чем помещается на экране, затем плавно скролить, пока не достигнет краю скрытой за экраном группы тайлов,Не будет рисовать всю карту, короче забей. Объясни что это? image_move:
object=1
for cy=1 to 32
for cx=1 to 32
gr.modify object,"x",x+(64*(cx-1))
gr.modify object,"y",y+(64*(cy-1))
object=object+1
next cx
next cy
return
А что это? map_made:
object=1
for cy=1 to 32
for cx=1 to 32
gr.bitmap.draw object,img+(im[cx,cy]),x+(64*(cx-1)),y+(64*(cy-1))
object=object+1
next cx
next cy
return
Изменено Magatino (15.02 / 12:02) (всего 1 раз) |
15.02.2015 / 14:09 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| Magatino, image_move перемещает карту, map_made создаёт карту. Но только сейчас обнаружил, что можно склеивать отдельные тайлы в один bitmap и уже его двигать. Вот пример: x=0
y=0
gr.open 255,0,0,0
gr.bitmap.load img1,"/grafics/океан 1.png"
gr.bitmap.load img2,"/grafics/трава 1.png"
gr.bitmap.draw im1,img1,x,y
gr.bitmap.draw im2,img2,x+64,y
gr.screen.to_bitmap all
gr.hide im1
gr.hide im2
gr.bitmap.draw screen,all,x,y+100
while 1=1
gr.render
repeat
Если убрать gr.hide, то будут видны оба варианта, сверху вариант из отдельных тайлов, а снизу созданная из них картинка, вот думаю, чтоб отрисовывать сетку при инициализации обычным циклом, затем снимать с сетки тайлов склеенный вариант, потом гасить сетку, чтоб та не решалась и после этого быстро скролить склеенную карту. Так наверно лучше? |
15.02.2015 / 15:15 | | Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| oslopov1991, Что то я нифига не врубаюсь что твой код делает Короче, объясню в словах, берётся одна большая картинка и эту картинку ты программно режешь на тайлы. Потом создаёшь или загружаешь массив карты. Скроллинг включается тогда когда идёт перемещение персонажа. Затем вычисляешь область отсечения. В двух циклах рисуешь и перемещаешь тайлы. |
15.02.2015 / 18:30 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| Да уже другой способ нашел. Как известно чем меньше картинок загружено тем быстрее они обрабатываются. Вот я и нашёл как уменьшить число картинок на экране и при этом отрисовывать большую карту. Вот что вышло: Очень длинный код Очень длинный код x1=0
y1=0
speed=32
dim map[32,32]
read.data~
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,~
1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,~
1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,~
1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,~
1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,2,2,2,1,~
1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,~
1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,~
1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,~
1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,~
1,1,1,1,2,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,~
1,1,1,1,2,2,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,~
1,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,~
1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,~
1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,~
1,1,1,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,~
1,1,1,1,1,2,2,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,~
1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,~
1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,~
1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,~
1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,~
1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,~
1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,~
1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1,~
1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,2,1,~
1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,~
1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,~
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,~
1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,~
1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,~
2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,~
1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,~
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1
for m=1 to 32
for r=1 to 32
read.next map[r,m]
next r
next m
gr.open 255,0,0,0
gr.screen w,h
gosub positions
gr.bitmap.load img1,"/grafics/океан 1.png"
gr.bitmap.load img2,"/grafics/трава 1.png"
gr.bitmap.load img3,"/grafics/вверх.png"
gr.bitmap.load img4,"/grafics/вправо.png"
gr.bitmap.load img5,"/grafics/влево.png"
gr.bitmap.load img6,"/grafics/вниз.png"
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx,cy]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen1
gr.hide image1
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx+16,cy]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen2
gr.hide image2
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx,cy+8]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen3
gr.hide image3
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx+16,cy+8]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen4
gr.hide image4
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx,cy+16]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen5
gr.hide image5
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx+16,cy+16]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen6
gr.hide image6
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx,cy+24]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen7
gr.hide image7
im=1
for cy=1 to 8
for cx=1 to 16
gr.bitmap.draw im,img+(map[cx+16,cy+24]),64*(cx-1),64*(cy-1)
im=im+1
next cx
next cy
gr.screen.to_bitmap screen8
gr.hide image8
gr.bitmap.draw image1,screen1,x1,y1
gr.bitmap.draw image2,screen2,x2,y2
gr.bitmap.draw image3,screen3,x3,y3
gr.bitmap.draw image4,screen4,x4,y4
gr.bitmap.draw image5,screen5,x5,y5
gr.bitmap.draw image6,screen6,x6,y6
gr.bitmap.draw image7,screen7,x7,y7
gr.bitmap.draw image8,screen8,x8,y8
gr.render
gr.bitmap.draw up,img3,(w/2)-400,(h/2)-100
gr.bitmap.draw right,img4,(w/2)-330,(h/2)-32
gr.bitmap.draw left,img5,(w/2)-470,(h/2)-32
gr.bitmap.draw down,img6,(w/2)-400,(h/2)+40
gr.render
while 1=1
gosub touch
gosub mechanic
gosub positions
gosub move
gr.render
repeat
touch:
do
gr.touch tap,posx,posy
until tap
gr.bitmap.draw up,img3,(w/2)-400,(h/2)-100
gr.bitmap.draw right,img4,(w/2)-330,(h/2)-32
gr.bitmap.draw left,img5,(w/2)-470,(h/2)-32
gr.bitmap.draw down,img6,(w/2)-400,(h/2)+40
gr.render
return
move:
gr.modify image1,"x",x1
gr.modify image1,"y",y1
gr.modify image2,"x",x2
gr.modify image2,"y",y2
gr.modify image3,"x",x3
gr.modify image3,"y",y3
gr.modify image4,"x",x4
gr.modify image4,"y",y4
gr.modify image5,"x",x5
gr.modify image5,"y",y5
gr.modify image6,"x",x6
gr.modify image6,"y",y6
gr.modify image7,"x",x7
gr.modify image7,"y",y7
gr.modify image8,"x",x8
gr.modify image8,"y",y8
return
mechanic:
if (posx>(w/2)-400 & posx<(w/2)-340) & (posy>(h/2)-100 & posy<(h/2)-40) then y1=y1+speed%up
if (posx>(w/2)-400 & posx<(w/2)+340) & (posy>(h/2)+40 & posy<(h/2)+100) then y1=y1-speed%dn
if (posx>(w/2)-470 & posx<(w/2)-410) & (posy>(h/2)-100 & posy<(h/2)+40) then x1=x1+speed%lt
if (posx>(w/2)-340 & posx<(w/2)-280) & (posy>(h/2)-100 & posy<(h/2)+40) then x1=x1-speed%rt
if x1>0 then x1=0
if x1<-1024 then x1=-1024
if y1>0 then y1=0
if y1<-1496 then y1=-1496
return
positions:
x2=x1+1024
y2=y1
x3=x1
y3=y1+512
x4=x2
y4=y3
x5=x1
y5=y1+1024
x6=x4
y6=y5
x7=x5
y7=y1+1536
x8=x6
y8=y7
return
Этот код читает массив по частям(ровно столько сколько умещается на экране тайлов), потом каждую часть по отдельности склеивает в большие рисунки. Далее, эти рисунки выводятся в нужном порядке и наконец сводятся с помощью виртуального джойстика на четыре стрелки. В итоге при альбомной ориентации планшета, экране разрешением 1024х552 . размер карты сокращается с 32х32 тайла до 2х4 картинки. Картинки можно считать новыми тайлами. Есть тормоза только потому, что бейсик этот интерпретатор, а не компилятор. Думаю если скомпилить прошу, то она будет летать как надо. Проца же не надо будешь распознавать операторы. Изменено Ксакеп (15.02 / 23:09) (всего 1 раз) |
15.02.2015 / 18:33 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| oslopov1991, data нужно генерировать в файл и читать из него потом, а не в исходник забивать вручную
|
15.02.2015 / 18:38 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| Да нельзя отсекать в этом бейсике. Можно только отрисова,скрыть или показать, но не отсечь совсем. Скрывать тайлы не подходит, просто на месте скрытого пустота остаётся и мешает что либо нарисовать ещё.
|
15.02.2015 / 18:41 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| Naik, на твой пост ( #401541) отвечу, Знаю, что в bin или dat надо пихать, но пока что с байтами не работаю. И размер карты не очень большой. Вручную минут пятнадцать уходит чтоб забить в массив. |
15.02.2015 / 20:28 | | kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| oslopov1991, Когда покажешь свою первую игру на этом языке? Я хочу чтобы ты это сделал + подробно описал сборку. Спасибо за ране.
|
15.02.2015 / 21:11 | | oslopov1991 Пользователь Сейчас: Offline
Имя: олег Регистрация: 24.12.2014
| kingdosya, с удовольствием тебе отвечу, Сомневаюсь, что она получится достаточно быстрой. Как никак бейсик интерпретатор, потому и тормозит. Так и не разобрался как делать плавный скроллинг достаточно быстро. Придётся скроллинг карт делать прерывистым, чтоб хоть как-то сносно игралось. Хотя может после компиляции тормоза пропадут всилу упрощения кода до ассемблера или что там в андроидах базовое. Про сборку напишу если соберу.
Изменено oslopov1991 (15.02 / 21:12) (всего 1 раз) |
<< 1 ... 8 9 10 11 12 ... 272 >> Всего сообщений: 2716 Фильтровать сообщения Поиск по теме Файлы топика (511)
|