|
11.07.2011, 18:26
|
#1
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
объект сменяющий свою глубину(задний/передний фон)
Изучаю BlitzMax. Возник вопрос: как можно сделать чтоб объект мог во время игры менять свою глубину? Т.е. в один момент один спрайт рисуется над вторым, в другой момент второй спрайт рисуется над первым. На BlitzMax пересел с GameMaker и там был параметр depth, чем больше число depth тем выше рисуется спрайт. Как такое можно реализовать, или может в BlitzMax уже есть что то для этого? Заранее благодарен...
|
(Offline)
|
|
11.07.2011, 18:32
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Рисуй с другой поочерёдностью. Позже рисованные - перекрывают те что раньше нарисованы.
|
(Offline)
|
|
11.07.2011, 18:38
|
#3
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Это понятно. Но мне нужно чтоб глубину можно было поменять во время игры, динамически так сказать...
|
(Offline)
|
|
11.07.2011, 19:04
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Дык, ты можешь это сделать сам, рисуй иначе - простая логика.
|
(Offline)
|
|
11.07.2011, 19:09
|
#5
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Буду признателен если приведете небольшой пример
|
(Offline)
|
|
11.07.2011, 19:22
|
#6
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Type sprite Field order:Int Method Compare:Int(otherObject:Object) s:sprite = sprite(otherObject) If Not s Then Return 1 Return order - s.order End Method End Type ' ---------------------------- SeedRnd(MilliSecs()) Local sprite_list:TList = New TList For Local i:Int=1 To 100 s:sprite = New sprite s.order = Rand(100) ListAddLast sprite_list, s Next SortList(sprite_list) For Local s:Int = EachIn sprite_list Print s.order Next
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
11.07.2011, 19:29
|
#7
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Если количество слоёв невелико и количество объектов тоже, то можно ввести параметр "слой" для объектов, и потом в цикле пробегать по слоям:
(Для трёх слоёв - задний, средний, передний - можно взять -1, 0, 1, просто для понятности)
Псевдокод:
Global depthStart% = -1
Global depthEnd% = 1
For local k%= depthStart To depthEnd
for local sprite:TSprite = eachin listSprites
if(sprite.layer <> k) continue 'пропускаем слой
//тут логику и рисуем
next
Next
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.07.2011, 19:57
|
#8
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Randomize, слегка поправил Ваш вариант:
Type sprite
Field order:Int
Method Compare:Int(otherObject:Object)
s:sprite = sprite(otherObject)
If Not s Then Return 1
Return order - s.order
End Method
End Type
' ----------------------------
SeedRnd(MilliSecs())
Local sprite_list:TList = New TList
For Local i:Int=1 To 100
s:sprite = New sprite
s.order = Rand(100)
ListAddLast sprite_list, s
Next
Local d:sprite
SortList(sprite_list)
For d = EachIn sprite_list
Print d.order
Next
Однако не подходит если есть несколько типов объектов, но все равно спасибо!
Жека, Огромное спасибо, это то что нужно!!!
|
(Offline)
|
|
11.07.2011, 20:49
|
#9
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Сообщение от xmarat
если есть несколько типов объектов
|
Можно использовать наследование.
Type Sprite Field Order:Int EndType Type Player Extends Sprite EndType Type Enemy Extends Sprite EndType Type Bullet Extends Sprite EndType
И их можно складывать в один лист.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.07.2011, 21:21
|
#10
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Точно. Я об этом не подумал. Тоже очень хороший вариант. Вопрос: какой из двух вариантов меньше нагружает процессор?
|
(Offline)
|
|
12.07.2011, 00:58
|
#11
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Сообщение от xmarat
Точно. Я об этом не подумал. Тоже очень хороший вариант. Вопрос: какой из двух вариантов меньше нагружает процессор?
|
Важнее то, как тебе проще и удобнее будет делать. Оба способа примерно равны по скорости.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
12.07.2011, 22:54
|
#12
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
А в какой лист добавлять Player, Enemy, Bullet? Или их можно в несколько листов добавлять?
|
(Offline)
|
|
13.07.2011, 00:05
|
#13
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
Сообщение от xmarat
А в какой лист добавлять Player, Enemy, Bullet? Или их можно в несколько листов добавлять?
|
Всех можно смело добавлять в один лист. Они же наследники Sprite.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
13.07.2011, 01:17
|
#14
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: объект сменяющий свою глубину(задний/передний фон)
В общем разобрался. Спасибо огромное за ответы. Кстати в моем случае больше подошел вариант с SortList, т.к. depth в игре сменяется не так часто. Считаю тема закрыта. Еще раз спасибо!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:16.
|