|
2D-программирование Вопросы, касающиеся двумерного программирования |
14.01.2012, 22:32
|
#32
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Однако чет я притормаживаю
меряешь время в начале цикла, меряешь в конце. второе-первое даст какие-то миллисекунды. делишь 1000 на эти миллисекунды если количество миллисекунд больше 0, это значение и есть фпс. Если миллисекунды 0, то выводишь текстом, что фпс >1000.
Можно выводить усредненное значение. Считать например среднее значение последних 50 кадров и выводить его.
|
(Offline)
|
|
14.01.2012, 22:44
|
#33
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Сейчас прочитал те ссылки, и ужаснулся. На счет скорости игры. То есть на более мощном или наоборот слабом компьютере чем у меня, скоросто передвижения игрока везде будет разной?
|
(Offline)
|
|
14.01.2012, 22:49
|
#34
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Именно так. Чтобы фпс не зависел от машины, надо собственноручно отмерять каждый кадр (суть есть дельта-тайминг).
|
(Offline)
|
|
14.01.2012, 22:56
|
#35
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Как это? Я уже планировал как-нибудь ограничивать максимальный фпс
|
(Offline)
|
|
14.01.2012, 23:04
|
#36
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Дельта-тайминг же. Надо по этим словам поиск провести и почитать. Тут много всякого умного понаписано было. А я уже не помню.
|
(Offline)
|
|
14.01.2012, 23:40
|
#37
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Да, тут много всего. Хотя и стандартный таймер тоже работает
|
(Offline)
|
|
15.01.2012, 15:07
|
#38
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
If KeyDown(200) Then
deltay#=-1
deltax#=0
a=2
b=1
EndIf
If KeyDown(208) Then
deltay#=1
deltax#=0
a=2
b=1
EndIf
If KeyDown(205) Then
deltax#=1
deltay#=0
a=1
b=0
EndIf
If KeyDown(203) Then
deltax#=-1
deltay#=0
a=1
b=0
EndIf
If KeyDown(205) And KeyDown(200) Then
deltay#=-1
deltax#=1
a=5
b=2
EndIf
If KeyDown(203) And KeyDown(200) Then
deltay#=-1
deltax#=-1
a=7
b=3
EndIf
If KeyDown(205) And KeyDown(208) Then
deltay#=1
deltax#=1
a=9
b=4
EndIf
If KeyDown(203) And KeyDown(208) Then
deltay#=1
deltax#=-1
a=11
b=5
EndIf
If KeyDown(203)=0 And KeyDown(208)=0 And KeyDown(205)=0 And KeyDown(200)=0 Then
speed#=0
deltax#=0
deltay#=0
EndIf
If x#<0 Then x#=1280
If x#>1280 Then x#=0
If y#<0 Then y#=1024
If y#>1024 Then y#=0
speed#=5
x#=px#+deltax#*speed#
px#=x#
y#=py#+deltay#*speed#
py#=y#
Сделал векторное перемещение игрока, но теперь игрок может выйти за пределы экрана, то есть
If x#<0 Then x#=1280
If x#>1280 Then x#=0
If y#<0 Then y#=1024
If y#>1024 Then y#=0
не работает Хотелось бы узнать почему?
|
(Offline)
|
|
15.01.2012, 15:27
|
#39
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Также создал систему коллизий, которая тоже не работает
For m.Main=Each Main
nx#=px#+deltax#*speed#
ny#=py#+deltay#*speed#
If x#>m\x+65 And y#>m\y+65 Then
If nx#>m\x+65 And ny#>m\y+65 Then
px#=x#
py#=y#
x#=nx#
y#=ny#
EndIf
EndIf
If x#<m\x-1 And y#<m\y-1 Then
If nx#<m\x-1 And ny#<m\y-1 Then
px#=x#
py#=y#
x#=nx#
y#=ny#
EndIf
EndIf
If x#>m\x+65 And y#<m\y-1 Then
If nx#>m\x+65 And ny#<m\y-1 Then
px#=x#
py#=y#
x#=nx#
y#=ny#
EndIf
EndIf
If x#<m\x-1 And y#>m\y+65 Then
If nx#<m\x-1 And ny#>m\y+65 Then
px#=x#
py#=y#
x#=nx#
y#=ny#
EndIf
EndIf
Next
Хотя логически, по-моему, всё верно.
P.S. О "m.main" можно прочитать на первой странице темы, где описывались функции создания и обновления камней.
|
(Offline)
|
|
15.01.2012, 17:02
|
#40
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
deltax#=0
deltay#=0
speed#=0
If KeyDown(200) Then deltay#=-1
If KeyDown(208) Then deltay#=1
If KeyDown(205) Then deltax#=1
If KeyDown(203) Then deltax#=-1
(громоздко конечно)
If KeyDown(203) Or KeyDown(208) Or KeyDown(205) Or KeyDown(200) Then
speed#=5.0
EndIf
(пусть px - временные, а x - окончательные координаты)
px=x+deltax*speed
py=y+deltay*speed
If px<0 Then px=1280
If px>1280 Then px=0
If py<0 Then py=1024
If py>1024 Then py=0
***отдельно где-то, где все функции***
Function CollideStones(px,py)
For s.stone=Each stone
(коллизия или проверка координат, все равно вроде)
If ImagesCollide(player,px,py,0,stoneimage,s\x, s\y, 0)
Return True
EndIf
Next
Return False
End Function
***
If Not CollideStones(px,py) then
x=px
y=py
Endif
Вот, я бы так переделал.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.01.2012, 18:19
|
#41
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Мда оптимизация у меня сильно хромает У меня 98 строчек и всё не работает, у тебя 28 строчек и всё работает
Но я не совсем понимаю работу с типами функцией Когда работаешь с массивами, то делаешь так:
For i=0 to imax
...
array(i)=...
...
То есть у массива есть свой идентификатор. А в типах как это работает?
|
(Offline)
|
|
15.01.2012, 18:41
|
#42
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
Цикл For Each...Next перебирает последовательно все существующие экземпляры данного типа (у меня Main переименован в stone, для понятности)
То есть каждый шаг переменная s получает значение очередного экземпляра (вернее даже будет "ссылается", а не "получает").
|
(Offline)
|
|
15.01.2012, 18:46
|
#43
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
Тогда как взаимодействовать не со всеми, а например с 3?
Так?
|
(Offline)
|
|
15.01.2012, 18:53
|
#44
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Опять проблемы.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.01.2012, 19:09
|
#45
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Опять проблемы.
То есть единственный способ это использовать after,before,first и last?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:20.
|