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

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

Вернуться   forum.boolean.name > Проекты > Проекты на BlitzMax

Ответ
 
Опции темы
Старый 13.03.2012, 14:13   #226
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

Сообщение от Nikich Посмотреть сообщение
Этот способ хорош, если ГГ пытается перейти с клетки со стенкой на свободную клетку. А если наоборот то фиг.
Инфу о наличии стенки хранить можно как в 1 клетке, так и в 2х, которые эта стенка и разделяет.
Сообщение от Nikich Посмотреть сообщение
Тогда придется еще просчитывать какая у него следующая клетка.
Просчитывать особо нечего, т.к. у клетки есть инфа (должна быть) о занимаемой ей позиции по типу индекса массива. Тогда проверка сводится к такому алгоритму (для движения вверх):

;если инфа о стенках только в 1 клетке хранится, а не в обеих смежных, то две проверки
;x,y - индексы текущей клетки, в которой игрок стоит
;up,down - направления
if(cells[x][y]\walls[up]=true) Return ;стена сверху у текущей клетки
if(cells[x][y-1]\walls[down]=true) Return ;стена снизу у верхней клетки
Плюс добавить проверку выход за границы поля.

рубишь фишку?
(Offline)
 
Ответить с цитированием
Старый 13.03.2012, 14:52   #227
reumep
Знающий
 
Аватар для reumep
 
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений
(для 159 пользователей)
Ответ: Vivo

Изометрическая графика? лолчто? как будут выглядеть блоки и их копание? придется переделывать всю графу и крабов!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (13.03.2012)
Старый 13.03.2012, 16:34   #228
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

ну да, я начинаю все заново.
(Offline)
 
Ответить с цитированием
Старый 13.03.2012, 16:51   #229
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

если бы я мог использовать массивы, то твой способ хорош. Но из-за большого мира я не могу массивы двухмерные исользовать - RАМ уйдет слищком много.

Последний раз редактировалось Nikich, 13.03.2012 в 18:37.
(Offline)
 
Ответить с цитированием
Старый 13.03.2012, 18:25   #230
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Vivo


Сообщение от Nikich Посмотреть сообщение
Но из-за большого мира я не могу массивы двухмерные исользовать - РАМ уйдет слищком много.
Большому миру - много окон?
Лучше пиши RAM, так понятнее.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 13.03.2012, 21:13   #231
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Все, проблема со стенками ушла. Но сразу за ней появилась новая. Вот я на радостях создал 9000(это не мем, а настоящее количество) тайлов земли. Рисую я, как образованный человек, лишь те что рядом с игроком. А результат то - 20 fps от силы. Так в чем же дело? Тайлы земельки - элементы типа, то есть создается 9000 элементов. И пожалуйста, мне интересно решение без использование чанков. Мне нужны эти 9000 тайлов сразу вместе. Потребуете код - кину. Но думаю можно и без него справится, доходчиво изъяснился я.
(Offline)
 
Ответить с цитированием
Старый 14.03.2012, 22:21   #232
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

А вот и код:

Global rc=CountGfxModes()
Global R1=GfxModeWidth(rc)
Global R2=GfxModeHeight(rc)


Graphics R1,R2
Global fnt1=LoadFont("Arial",24)
SetFont fnt1
SetBuffer BackBuffer()
Dim TileImg(50)
TileImg(0)=LoadImage("ground.bmp")
TileImg(1)=LoadImage("grass.bmp")
Global cx#,cy#,plx#,ply#,tdst,tfps,fps
Global lfps=60
Type tl
Field x,y,z,id
End Type
For i=0 To 1
MaskImage TileImg(i),255,255,255
MidHandle TileImg(i)
Next
Global pl=LoadImage("pl.bmp")
MaskImage pl,255,255,255
MidHandle pl

CreateWorld()


Function CreateWorld()
For i=-50 To 50
For j=-50 To 50
t.tl=New tl
t\x=R1/2+(i-j)*32
t\y=R2/2+(i+j)*16
t\id=Rnd(0,1)
Next
Next
End Function

Function UpdateTiles()
For t.tl=Each tl
tdst=Sqr((t\x-plx)^2+(t\y-ply)^2)
If tdst<Sqr((R1/2)^2+(R2/2)^2)+32 Then
DrawImage TileImg(t\id),t\x,t\y
EndIf
Next
End Function

Function UpdatePlayer()
If KeyDown(17) Then
cy=cy+2.5/lfps*60
EndIf
If KeyDown(31) Then
cy=cy-2.5/lfps*60
EndIf
If KeyDown(30) Then
cx=cx+5/lfps*60
EndIf
If KeyDown(32) Then
cx=cx-5/lfps*60
EndIf
Origin cx,cy
plx=640-cx
ply=512-cy
DrawImage pl,plx,ply
End Function

Function UpdateFPS()
If MilliSecs()-tfps<1000 fps=fps+1
If MilliSecs()-tfps>1000 Then
lfps=fps
tfps=MilliSecs()
fps=0
EndIf
Color 0,0,0
Text -cx,-cy,lfps
End Function

While Not KeyHit(1)


UpdateTiles()
UpdateFPS()
UpdatePlayer()


Flip
Cls
Wend

Напомню, проблема в том, что при создании больше 9000 тайлов начинаются лаги, хотя они даже не рисуются, так что непонятно и почему так происходит.
(Offline)
 
Ответить с цитированием
Старый 15.03.2012, 02:01   #233
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Vivo

For перебор, степени и корни в цикле.
Игрок может и не видит, но эвм о них всех думает с заботой.

Я сделал dll и через ячейки проверяю текущие объекты в них по списку
http://www.youtube.com/watch?v=K0_ehAhhkHQ
(Offline)
 
Ответить с цитированием
Старый 15.03.2012, 07:05   #234
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

1. Переходи на блитцмакс
2. Сам цикл с большим числом проходов напрягающ для слабых тачек.

Извлечение корня выкинуть можно, оперируя везде квадратами расстояний.

На счёт занимания массивом слишком большого объёма памяти: где у тебя хранятся экземпляры тайлов? в списке. а что такое список? это хрень, состоящая из узлов, каждый из которых хранит указатель на данные и на следующие за ними данные.
А в массиве что хранится? те же самые указатели.
Так что жрать памяти должно примерно одинаково (поправьте знающие люди, если не прав), но работать с массивами в разы удобнее.

3. R1 R2 для размеров экрана не информативно (для меня)

4. Для поля 1000х1000 твоя прога заняла 42 мб оперативки.
(Offline)
 
Ответить с цитированием
Старый 15.03.2012, 09:15   #235
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

а на сколько макс сильнее в плане перебора For each? Я и сам об этом думал, он как ни как и на ОП язык тянет, но классы меня сильно пугают
Но точно как-то делают без чанков. В Террарии чанков нету вроде, а там значительно больше чем 9000 блоков(в 50 раз как минимум). Также старушка Diablo 2 скорее всего без чанков была, тоже с огромными картами. Видимо у них есть тайные знания...
(Offline)
 
Ответить с цитированием
Старый 15.03.2012, 13:40   #236
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

Возможно, большие поля делят на сектора, и далёкие сектора отсекают. И подгружают их по мере надобности. Это мои догадки лишь.

Про блитцмакс: как только ты поймёшь что такое класс, уже не захочешь без них программить.

Вот ссылка на мануал по максу на русском, почитай на досуге, проведи аналогии с блитц3д: Wave’s~ BlitzMax Tutorial ~ 2004 - 7 Jan ~ Version 5
(Offline)
 
Ответить с цитированием
Старый 15.03.2012, 17:36   #237
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

А и почему R1 и R2 не информативны? Вторая и третья строчка описывают что это за переменные. Я решил не делать меню с выбором разрешений, потому что всегда найдутся люди разрешения которых в списке нету, так что пусть пока играют с максимальным разрешением монитора.
Кстати, чанк и значит сектор
(Offline)
 
Ответить с цитированием
Старый 16.03.2012, 06:35   #238
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

> А и почему R1 и R2 не информативны?

х их з. не бери в голову.

а что если делать поля 100х100, но не склеивать их на лету, а делать переход "на новый экран", как у тебя было изначально?
(Offline)
 
Ответить с цитированием
Старый 16.03.2012, 09:24   #239
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Да, наверное это единственный выход. Но пример Diablo 2 меня насторожил. Карты там большие, особенно на те времена, а ведь игра шла и не лагала. Может блитц3Д безнадежен?
(Offline)
 
Ответить с цитированием
Старый 16.03.2012, 13:34   #240
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

Сообщение от Nikich Посмотреть сообщение
Может блитц3Д безнадежен?
Каждой задаче своё средство реализации.
Для 2д блитцмакс лучше, это всё что я могу сказать про средство.
Почитай в инете на счёт больших карт, и выбери решение подходящее; ну или сам придумай.

ПС: на компе с 4х ядерным процессором с 8гб оперативы и с современной видюхой сделанное на блитц3д летает; когда среднестатистический комп станет таким...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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