Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 14.01.2012, 17:36   #31
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Опять проблемы.

Давно дело было, не помню уже. Но вопрос на форуме популярный был.
Вот, например (измерение):
http://forum.boolean.name/showthread.php?t=5
Еще (дельта-тайминг):
http://forum.boolean.name/showthread.php?t=8549

Ну и еще можно поискать.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 18:32   #32
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 12.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,835 пользователей)
Ответ: Опять проблемы.

Однако чет я притормаживаю
меряешь время в начале цикла, меряешь в конце. второе-первое даст какие-то миллисекунды. делишь 1000 на эти миллисекунды если количество миллисекунд больше 0, это значение и есть фпс. Если миллисекунды 0, то выводишь текстом, что фпс >1000.
Можно выводить усредненное значение. Считать например среднее значение последних 50 кадров и выводить его.
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 18:44   #33
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Сейчас прочитал те ссылки, и ужаснулся. На счет скорости игры. То есть на более мощном или наоборот слабом компьютере чем у меня, скоросто передвижения игрока везде будет разной?
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 18:49   #34
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Опять проблемы.

Именно так. Чтобы фпс не зависел от машины, надо собственноручно отмерять каждый кадр (суть есть дельта-тайминг).
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 18:56   #35
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Как это? Я уже планировал как-нибудь ограничивать максимальный фпс
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 19:04   #36
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Опять проблемы.

Дельта-тайминг же. Надо по этим словам поиск провести и почитать. Тут много всякого умного понаписано было. А я уже не помню.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 14.01.2012, 19:40   #37
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Да, тут много всего. Хотя и стандартный таймер тоже работает
(Offline)
 
Ответить с цитированием
Старый 15.01.2012, 11:07   #38
Nikich
Бывалый
 
Регистрация: 21.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, 11:27   #39
Nikich
Бывалый
 
Регистрация: 21.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, 13:02   #40
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 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
Вот, я бы так переделал.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (15.01.2012)
Старый 15.01.2012, 14:19   #41
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Мда оптимизация у меня сильно хромает У меня 98 строчек и всё не работает, у тебя 28 строчек и всё работает
Но я не совсем понимаю работу с типами функцией
For s.stone=Each stone
Когда работаешь с массивами, то делаешь так:
For i=0 to imax
...
array(i)=...
...
То есть у массива есть свой идентификатор. А в типах как это работает?
(Offline)
 
Ответить с цитированием
Старый 15.01.2012, 14:41   #42
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Опять проблемы.

Цикл For Each...Next перебирает последовательно все существующие экземпляры данного типа (у меня Main переименован в stone, для понятности)
То есть каждый шаг переменная s получает значение очередного экземпляра (вернее даже будет "ссылается", а не "получает").
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 15.01.2012, 14:46   #43
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

Тогда как взаимодействовать не со всеми, а например с 3?
...
s.stone=3
...
Так?
(Offline)
 
Ответить с цитированием
Старый 15.01.2012, 14:53   #44
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Опять проблемы.

Нет.
Вот тут подробно: http://help.boolean.name/commands/2d_commands/Type.htm
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (15.01.2012)
Старый 15.01.2012, 15:09   #45
Nikich
Бывалый
 
Регистрация: 21.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Опять проблемы.

То есть единственный способ это использовать after,before,first и last?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com