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)

Nikich 17.02.2012 21:53

Ответ: Vivo
 
Сейчас рисуется DrawImage(). Её нельзя загрузить одной картинкой, так как она меняется в зависимости от освещения. Если день то картинка одна, если ночь друга, если ночь и рядом факел - такая же как днём. Также, обратил внимание на то, что Cls ничего не делает( по крайней мере видимо). На что он влияет?

FireOwl 17.02.2012 22:31

Ответ: Vivo
 
Ясно.
А cls (сокращенно от 'clear screen') - команда которая стирает все с экрана.
Так как в большинстве игр экран все равно перерисуется целиком, чаще всего не используется.

Nikich 17.02.2012 22:36

Ответ: Vivo
 
И что, получается кроме drawimage() ничего не остаётся? И ещё вопрос: почему так требовательно. Рисуется только 1280 картинок, а в минуса уходит 500 фпс.

SBJoker 17.02.2012 22:39

Ответ: Vivo
 
ну дык 1280 DIP это немало, неплохо бы оптимизировать было :)

Nikich 17.02.2012 22:45

Ответ: Vivo
 
Вот и думаю, как бы это сделать. Пытался сделать так, чтобы рисовалась только та земля что видна, правда функция на проверку требует столько же(если не больше):)

SBJoker 18.02.2012 00:50

Ответ: Vivo
 
Ни за что не поверю что простая проверка пересечения прямоугольников потребует больше времени чем вызов такой тяжелой функции как DIP.

Nikich 18.02.2012 01:07

Ответ: Vivo
 
Функция делает перебор по всем элементам типа земля и по всем элементам типа камни. То есть, если на карте 100 камней, ты мы проверяем 1280 блоков земли на эти 100 камней, только ради того чтобы не рисовать 100 блоков земли под ними.

FireOwl 18.02.2012 01:28

Ответ: Vivo
 
А зачем вообще блоки земли хранятся? Разве с ней можно что-то сделать (имею ввиду игровой процесс)?
Пусть рисует поблочно землю только на текущем экране, с учетом освещения, все как надо, а как объекты ее не хранит вообще.

Nikich 18.02.2012 01:34

Ответ: Vivo
 
а без типов тут не обойтись, это нужно для удобного расчета расстояния от блока земли до факела.

FireOwl 18.02.2012 02:14

Ответ: Vivo
 
Но ведь можно в том месте, где происходит отрисовка всего,
тупо пустить цикл рисования тайлов земли, и на каждом шагу цикла
будут доступны координаты тайла земли (иначе как их рисовать?),
и следовательно можно будет рассчитать и расстояние до источников света, и подходящий цвет.

Nikich 18.02.2012 13:00

Ответ: Vivo
 
Код:

Function Close2Stone(lx,ly)
For m.Main=Each Main
If ImagesOverlap(m\stone,m\x,m\y,dground,lx,ly) Then
Return True
EndIf
Return False
Next
End Function





Function UpdateMap()
For g1.groundmap=Each groundmap

If day=1 Then
g1\light=1
EndIf
If NTT(g1\x,g1\y)=False And day=0 Then
g1\light=0
EndIf
If g1\light=0 And NTT(g1\x,g1\y) Then
g1\light=1
EndIf
If g1\light=1 Then
DrawImage ground,g1\x,g1\y
EndIf
If g1\light=0 Then
DrawImage dground,g1\x,g1\y
EndIf
Next
End Function

Результат -2 FPS.

Nikich 18.02.2012 16:58

Ответ: Vivo
 
Код:

Function CreateArrow(x2,y2)
ar.arrow_=New arrow_
ar\x=x2
ar\y=y2
ar\angle=ATan2(MouseY()-y,MouseX()-x)+180
End Function

Function UpdateArrow()
For ar.arrow_=Each arrow_
ar\x=ar\x+Cos(ar\angle)*15
ar\y=ar\y+Sin(ar\angle)*15
DrawImage arrow1(Int(ar\angle)),ar\x,ar\y
If ar\x>R1 Or ar\x<0 Or ar\y>R2 Or ar\y<0
Delete ar
EndIf
Next
End Function

Почему-то, стрела летит в противоположную сторону от курсора. Если поменять "+Cos(ar\angle)*15" на "-" то полетит куда надо, вот только рисоваться тогда будет не той стороной:) Можете подсказать что не так?
Также, нужны картинки лука, стрелы, копья, верстака, крабового мяса, сундука, двери. Всё кроме верстака 32х32, верстак 64х32. Заранее спасибо!
UPD
Всё проблема решена: просто перевернул картинку стрелы. Хотя, не ясно почему нужен минус, а не плюс.

FireOwl 18.02.2012 21:07

Ответ: Vivo
 
Код:

Function UpdateMap()
cwidth=40
cheight=30 (поменять, в зависимости от того, сколько блоков вмешается на экран по ширине и высоте соответственно)

For x=0 to cwidth
  For y=0 to cheight
      light = False
      If day=1 Then
        light=True
      EndIf
      If NTT(x*32, y*32)=False And day=0 Then
        light=False
      EndIf
      If Not light And NTT(x*32, y*32) Then
        light=True
      EndIf
      If light Then
        DrawImage ground, x*32, y*32
      EndIf
      If Not light Then
        DrawImage dground, x*32, y*32
      EndIf
  Next
Next
End Function

Я имел ввиду что-то вроде этого.

Nikich 18.02.2012 21:19

Ответ: Vivo
 
а на сколько это более выгодно, чем использовать типы?

FireOwl 18.02.2012 21:24

Ответ: Vivo
 
Экономит память. Делает код немого понятнее. А быстродействие надо затестить.


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

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