|
17.02.2012, 21:53
|
#151
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
Сейчас рисуется DrawImage(). Её нельзя загрузить одной картинкой, так как она меняется в зависимости от освещения. Если день то картинка одна, если ночь друга, если ночь и рядом факел - такая же как днём. Также, обратил внимание на то, что Cls ничего не делает( по крайней мере видимо). На что он влияет?
|
(Offline)
|
|
17.02.2012, 22:31
|
#152
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Vivo
Ясно.
А cls (сокращенно от 'clear screen') - команда которая стирает все с экрана.
Так как в большинстве игр экран все равно перерисуется целиком, чаще всего не используется.
|
(Offline)
|
|
17.02.2012, 22:36
|
#153
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
И что, получается кроме drawimage() ничего не остаётся? И ещё вопрос: почему так требовательно. Рисуется только 1280 картинок, а в минуса уходит 500 фпс.
|
(Offline)
|
|
17.02.2012, 22:39
|
#154
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Vivo
ну дык 1280 DIP это немало, неплохо бы оптимизировать было
__________________
|
(Offline)
|
|
17.02.2012, 22:45
|
#155
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
Вот и думаю, как бы это сделать. Пытался сделать так, чтобы рисовалась только та земля что видна, правда функция на проверку требует столько же(если не больше)
|
(Offline)
|
|
18.02.2012, 00:50
|
#156
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Vivo
Ни за что не поверю что простая проверка пересечения прямоугольников потребует больше времени чем вызов такой тяжелой функции как DIP.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.02.2012, 01:07
|
#157
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
Функция делает перебор по всем элементам типа земля и по всем элементам типа камни. То есть, если на карте 100 камней, ты мы проверяем 1280 блоков земли на эти 100 камней, только ради того чтобы не рисовать 100 блоков земли под ними.
|
(Offline)
|
|
18.02.2012, 01:28
|
#158
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Vivo
А зачем вообще блоки земли хранятся? Разве с ней можно что-то сделать (имею ввиду игровой процесс)?
Пусть рисует поблочно землю только на текущем экране, с учетом освещения, все как надо, а как объекты ее не хранит вообще.
|
(Offline)
|
|
18.02.2012, 01:34
|
#159
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
а без типов тут не обойтись, это нужно для удобного расчета расстояния от блока земли до факела.
|
(Offline)
|
|
18.02.2012, 02:14
|
#160
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Vivo
Но ведь можно в том месте, где происходит отрисовка всего,
тупо пустить цикл рисования тайлов земли, и на каждом шагу цикла
будут доступны координаты тайла земли (иначе как их рисовать?),
и следовательно можно будет рассчитать и расстояние до источников света, и подходящий цвет.
|
(Offline)
|
|
18.02.2012, 13:00
|
#161
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: 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.
|
(Offline)
|
|
18.02.2012, 16:58
|
#162
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: 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
Всё проблема решена: просто перевернул картинку стрелы. Хотя, не ясно почему нужен минус, а не плюс.
|
(Offline)
|
|
18.02.2012, 21:07
|
#163
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: 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
Я имел ввиду что-то вроде этого.
|
(Offline)
|
|
18.02.2012, 21:19
|
#164
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Vivo
а на сколько это более выгодно, чем использовать типы?
|
(Offline)
|
|
18.02.2012, 21:24
|
#165
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Vivo
Экономит память. Делает код немого понятнее. А быстродействие надо затестить.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:18.
|