forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на BlitzMax (http://forum.boolean.name/forumdisplay.php?f=106)
-   -   Vivo (http://forum.boolean.name/showthread.php?t=16218)

4yBa4Ok 06.05.2012 16:58

Ответ: Vivo
 
У меня ваще черный экран.

1920x1080

Nikich 06.05.2012 17:18

Ответ: Vivo
 
Перезайди, это проблема с генерацией мира.

Nikich 06.05.2012 22:06

Ответ: Vivo
 
Вложений: 1
Код:

dx=KeyDown(KEY_D)-KeyDown(KEY_A)
If dx=1 dpic=1 это для картинки
If dx=-1 dpic=0

If camera_x+50*dx>0 And camera_x+R1+50*dx<map_width*16 And camera_y-g>0 And  camera_y+R2-g*20<map_height*16 проверяем, не выходит ли камера за пределы карты


If solid[map[Int((camera_x+R1/2)/16),Int((camera_y-g+R2/2+48)/16)]]=1 Or solid[map[Int((camera_x+24+R1/2)/16),Int((camera_y-g+R2/2+48)/16)]]=1 Or solid[map[Int((camera_x+15+R1/2)/16),Int((camera_y-g+R2/2+48)/16)]]=1 проверяем на наличие твёрдого блок под игроком. +48 - из-за того, что размеры картинки игрока 28 на 48. Три раза проверяем потому что игрок может занять сразу три блока.

g=0 Останавливаем скорость игрока по оси y

 If KeyDown(KEY_SPACE) g=7 Проверяем на нажатие пробела

camera_y=(Int(camera_y+49)/16)*16-38-g !!!!! ВОТ ОНО. ВОТ ЭТОТ БРЕД МОИХ КОШМАРОВ!!! объясняю логику. camera_y+49 - из-за размеров картинки, то есть проверяем пикслель под игроком. /16 - переводим координаты в блоки, *16 - обратно в нормальную систему. -g - это для поднятия игрока, если он прыгает. -38 - наш злобный враг. В нём вся соль. Дело в том, что если мыслить логически, то мы должны написать -49( мы ведь проверяли блок под(!) игроком, а камера находится на уровне головы), но вот в практике -49 не даёт результата. Точнее оно может дать результат на каком-то разрешении. -38 даёт результат на высоте экрана в 600( лично у меня ). Дальше комментировать думаю не стоит, ибо там всё понятно, да и ошибка не там.



Else
g=g-0.4
 If g<-20 g=-20

 If g>0
  If solid[map[Int((camera_x+R1/2+28)/16),Int((camera_y+R2/2-1)/16)]]=0 And solid[map[Int((camera_x+R1/2)/16),Int((camera_y+R2/2-1)/16)]]=0 And  solid[map[Int((camera_x+R1/2+16)/16),Int((camera_y+R2/2-1)/16)]]=0
  camera_y=camera_y-g
 Else
 g=-g
  EndIf
 Else

  camera_y=camera_y-g

 EndIf
EndIf



If Not collision()
camera_x=camera_x+dx*speed

EndIf


EndIf
End Function

Function collision()


For i=1 To 3
If solid[map[Int((camera_x-2+dx*speed+R1/2)/16),Int((camera_y-1+R2/2)/16)+i]]=1
camera_x=(Int((camera_x)/16)-1)*16+16
Return True

EndIf
Next

For i=1 To 3
If solid[map[Int((camera_x+dx*speed+28+R1/2)/16),Int((camera_y-1+R2/2)/16)+i]]=1
'camera_x=(Int((camera_x+32)/16))*16
Return True
EndIf

Next
End Function


Так, мне нужна ваша помощь, и сейчас это действительно серьёзно. Я вообще не понимаю почему код не работает. Точнее сказать работает, но только на каких-то разрешениях экрана, хотя не ясно как это вообще взаимосвязано.
И проверьте новую версию, возможно нашёл ошибку.

Spy4433 07.05.2012 11:30

Ответ: Vivo
 
Пашет норм бегает :) сделай по плавнее его движение и ваще классно будет.

Код:

FPS:60 стабильно
разрешение:1280х1024


---------------------------
Плавность движения по x а то как то немного резковато

Nikich 07.05.2012 21:12

Ответ: Vivo
 
Хорошо, сейчас сделаю ускорение, чтобы он не мгновенно разгонялся. И всё же сделал полную поддержку любого разрешение( играл на 240х320, даже там всё работает). Пока что заливать не буду, а то кроме этого ничего не добавлено.
Кстати, может кто-нибудь помочь с мультиплеером?

Nikich 08.05.2012 17:39

Ответ: Vivo
 
Код:

Global rr2=Graphics(800,600,0,60,0)
EndGraphics
Global rr1=Graphics(R1,R2,0,60,0)
...
If KeyHit(KEY_F11)
EndGraphics
SetGraphics(rr1)

EndIf
If KeyHit(KEY_F12)
EndGraphics
SetGraphics rr2

EndIf

Можете подсказать, в чём ошибка? Не совсем понимаю, как вообще изменять риалтайм разрешение.

Spy4433 08.05.2012 17:50

Ответ: Vivo
 
а в чем проблема то ?


Код:

Global rr1=Graphics(800,600,0,60,0)



Repeat
DrawRect 10,10,100,40


If KeyHit(KEY_E) Then
set=1-set
If set=0 Then
EndGraphics
rr1=Graphics(800,600,0,60,0)
SetGraphics(rr1)
EndIf

If set=1 Then
EndGraphics
rr2=Graphics(320,240,0,60,0)
SetGraphics(rr2)
EndIf

EndIf
Flip

Until KeyHit(KEY_ESCAPE)


Nikich 08.05.2012 18:16

Ответ: Vivo
 
А-а-а, понял. Надо заново создавать Graphics при каждом переключении, а не предварительно. Спасибо!

Nikich 08.05.2012 21:12

Ответ: Vivo
 
Вложений: 2
Новая версия.
- F11 - переключение на оконный\полноэкранный режим
- 1,2,3,4,5,6,7,8 - переключение между клетками инвентаря.
- На колёсико мыши можно менять используемую ячейку на панели быстрого доступа.
- Теперь нельзя ставить\разрушать блоки на далёкой дистанции.
- Теперь блоки не разрушаются мгновенно, требуется некоторое время(!)

Черный крыс 02.06.2012 14:20

Ответ: Vivo
 
Цитата:

Работа с пиксмапой ничего не требует. Вся работа с ней скрыта за тенью LoadImage LoadAnimImage. И ты просто можешь менять разрешение "на лету" не перезагружая заново все ресурсы как бы это надо было бы делать в Blitz3D.
Ты тлько не забывай что она требует повышенный расход оперативной памяти, причем стандартным сборщиком мусора он никак не учитывается. Класс TPixmap - это ненужный балласт для системы, через него очень проблематично пользоваться функцией Read\WritePixel(), он не обеспечивает управления картинкой в реальном времени, и еще как минус - отсутствие быстро читать и писать пикселя. - Слишком много минусов ради одного пункта удобности, автомотической перегрузки графики при потере девайса.
А вот Blitz3D - устроен куда правильнее. Я лучше вручную буду перегружать всю графику, чем иметь такой геморой как в BlitzMax.

Randomize 04.06.2012 23:50

Ответ: Vivo
 
Цитата:

Сообщение от Diablo1909 (Сообщение 229237)
Я лучше вручную буду перегружать всю графику, чем иметь такой геморой как в BlitzMax.

Я даже в своё время "отпиливал" TPixmap, но увы сорс ныне утерян.

reumep 05.06.2012 23:56

Ответ: Vivo
 
Цитата:

Сообщение от Nikich (Сообщение 227559)
Новая версия.
- F11 - переключение на оконный\полноэкранный режим
- 1,2,3,4,5,6,7,8 - переключение между клетками инвентаря.
- На колёсико мыши можно менять используемую ячейку на панели быстрого доступа.
- Теперь нельзя ставить\разрушать блоки на далёкой дистанции.
- Теперь блоки не разрушаются мгновенно, требуется некоторое время(!)

будь другом, откомпилируй, пожалуйста(нет blitzmax, лень искать и качать)

Nikich 06.06.2012 16:48

Ответ: Vivo
 
Так в архиве ведь .exe.

Жека 07.08.2012 06:52

Ответ: Vivo
 


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot