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

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

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

Ответ
 
Опции темы
Старый 16.03.2012, 16:57   #241
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Кажется понял почему есть проблемы. Оказывается я до сих пор ничего не знал о банках, а они как оказалось полезны.
(Offline)
 
Ответить с цитированием
Старый 17.03.2012, 01:43   #242
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
Dim tld(10000,10000)
For i=0 To 1
MaskImage TileImg(i),255,255,255
MidHandle TileImg(i)
Next
Dim ObjImg(50)
For i=0 To 2
ObjImg(i)=LoadImage("rock"+(i+1)+".bmp")
MaskImage ObjImg(i),255,255,255
HandleImage ObjImg(i),48,32
Next

Type obj
 Field x,y,z,id,life
End Type 
For i=0 To 1
MaskImage TileImg(i),255,255,255
MidHandle TileImg(i)
Next
Dim pl(2,2)
For i=-1 To 1
For i1=-1 To 1
pl(i+1,i1+1)=LoadImage("pl"+i+","+i1+".bmp")
MaskImage pl(i+1,i1+1),255,255,255
MidHandle pl(i+1,i1+1)
Next
Next

Global dx,dy
CreateWorld()


Function CreateWorld()
For i=0 To 100
 For j=0 To 100
 tld(i,j)=Rnd(0,1)
 DebugLog i
 Next
Next
End Function 


Function UpdateTiles()

For i=Int((R1/2-cx-R1/2-32)/32) To Int((R1/2-cx+R1/2+32)/32)
For j=Int((R2/2-cy-R2/2-16)/16) To Int((R2/2-cy+R2/2+16)/16)


DrawImage TileImg(tld(i*32,j*16)),i*32,j*16


Next
Next
End Function

Function UpdatePlayer()
If KeyDown(17) Then
cy=cy+2.5
dy=1
dx=0
EndIf
If KeyDown(31) Then
cy=cy-2.5
dy=-1
dx=0
EndIf
If KeyDown(30) Then
cx=cx+5
dx=-1
If KeyDown(31)=0 And KeyDown(17)=0 Then  
dy=0
EndIf
EndIf
If KeyDown(32) Then
cx=cx-5
dx=1
If KeyDown(31)=0 And KeyDown(17)=0 Then
dy=0
EndIf
EndIf

Origin cx,cy

plx=R1/2-cx
ply=R2/2-cy
DrawImage pl(dx+1,dy+1),plx,ply
End Function

Function ClObj(x,y)
For o.obj=Each obj
If Int(o\x/64)=x And Int(o\y/32)=y Then
Return True
EndIf
Next
Return False

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
Тайлы 64(ширина) на 32. Помогите найти ошибку. Ругается на UpdateTiles( ничего удивительного, скорее всего я как-то не так написал формулу для вычисления x и y).
(Offline)
 
Ответить с цитированием
Старый 17.03.2012, 07:33   #243
Markova
ПроЭктировщик
 
Аватар для Markova
 
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений
(для 218 пользователей)
Ответ: Vivo

Вы это, бросайте там перемножать =) зачем эти коды выкладывать, у тебя массив в минуса уходит =))

For i=0 To Int((R1/2-cx+R1/2+32)/32)
For j=0 To Int((R2/2-cy+R2/2+16)/16)

For i=Int((R1/2-cx-R1/2-32)/32) To Int((R1/2-cx+R1/2+32)/32)
For j=Int((R2/2-cy-R2/2-16)/16) To Int((R2/2-cy+R2/2+16)/16)

If KeyDown( 2 )=True Then x#=x#-0.1 
If KeyDown( 3 )=True Then x#=x#+0.1 

Text 10,10*i+(x#),"i:"+i*32
Text 50,10*j+(x#),"j:"+j*16

Next
Next
Проверь Text 10,10,TileImg(-1)


Блин ни как кодек подобрать не могу =))
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!

Последний раз редактировалось Markova, 17.03.2012 в 08:40.
(Offline)
 
Ответить с цитированием
Старый 17.03.2012, 14:19   #244
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
Dim tld(10000,10000)
For i=0 To 1
MaskImage TileImg(i),255,255,255
MidHandle TileImg(i)
Next
Dim ObjImg(50)
For i=0 To 2
ObjImg(i)=LoadImage("rock"+(i+1)+".bmp")
MaskImage ObjImg(i),255,255,255
HandleImage ObjImg(i),48,32
Next

Type obj
 Field x,y,z,id,life
End Type 
For i=0 To 1
MaskImage TileImg(i),255,255,255
MidHandle TileImg(i)
Next
Dim pl(2,2)
For i=-1 To 1
For i1=-1 To 1
pl(i+1,i1+1)=LoadImage("pl"+i+","+i1+".bmp")
MaskImage pl(i+1,i1+1),255,255,255
MidHandle pl(i+1,i1+1)
Next
Next

Global dx,dy
CreateWorld()


Function CreateWorld()
For i=0 To 500
 For j=0 To 500
 tld(i,j)=Rnd(0,1)
 Next
Next
End Function 


Function UpdateTiles()

For i=0 To 500
For j=0 To 500

If (i-j)*32+32>-cx And (i-j)*32-32<R1-cx And (i+j)*16+32>-cy And (i+j)*16-32<-cy+R2
DrawImage TileImg(tld(i,j)),(i-j)*32,(i+j)*16
EndIf

Next
Next
End Function

Function UpdatePlayer()
If KeyDown(17) Then
cy=cy+2.5
dy=1
dx=0
EndIf
If KeyDown(31) Then
cy=cy-2.5
dy=-1
dx=0
EndIf
If KeyDown(30) Then
cx=cx+5
dx=-1
If KeyDown(31)=0 And KeyDown(17)=0 Then  
dy=0
EndIf
EndIf
If KeyDown(32) Then
cx=cx-5
dx=1
If KeyDown(31)=0 And KeyDown(17)=0 Then
dy=0
EndIf
EndIf

Origin cx,cy

plx=R1/2-cx
ply=R2/2-cy
DrawImage pl(dx+1,dy+1),plx,ply
End Function

Function ClObj(x,y)
For o.obj=Each obj
If Int(o\x/64)=x And Int(o\y/32)=y Then
Return True
EndIf
Next
Return False

End Function

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

While Not KeyHit(1)


UpdateTiles()

UpdateFPS()
UpdatePlayer()



Flip
Cls
Wend
В предыдущем коде вам вряд ли многое понятно, так что выкладываю нормальную версию. В общем, нужна помощь в определении i,j ячейки массива зная его координаты.
(Offline)
 
Ответить с цитированием
Старый 18.03.2012, 05:16   #245
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

В тайловой карте вычислять индексы по координатам нет надобности; вот если наоборот то можно.
Всем объектам карты задай индексы cellX, cellX. Игроку конечно тоже.
При перемещении игрока изменяй индексы, пошел вверх - сделал cellY = cellY-1 и т.д.

Сейчас ты проходишь по всему массиву, как делал в for each, но можно только ближние к игроку клетки брать

Local startX% = player\cellX-viewCountX
If(startX < 0) startX = 0
Local endX% = player\cellX+viewCountX
If(endX >= fieldDimX) endX = fieldDimX-1
Local startY% = player\cellY-viewCountY
If(startY < 0) startY = 0
Local endY% = player\cellY+viewCountY
If(endY >= fieldDimY) endY = fieldDimY-1
Local xx%, yy%
For xx=startX to endX
For yy=startY to endY
; здесь только ближние к игроку
Next
Next
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (18.03.2012)
Старый 18.03.2012, 12:58   #246
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

только viewcount_x и viewcount_y еще на два поделить нужно. Большое спасибо!
(Offline)
 
Ответить с цитированием
Старый 21.03.2012, 23:49   #247
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Сейчас со мной произошла довольно странная вещь. Решив ещё потренироваться в работе с камерой, решил сделать 2D платформер с скроллингом. Возникли трудности, но когда я написал код, я ВНЕЗАПНО задумался, а почему он работает? Это повергло меня в шок: я не понял как работает мой же код. Когда я его писал, всё выходило машинально и я даже не думал что я делаю, просто делал и всё.
Function UpdWorld()
Color 50,100,255
Rect cx,cy,R1,R2,1
DrawImage road(1),cx,R2-100+cy
End Function

Function UpdPl()
cx=R1/2-px
cy=R2/2-py
a=KeyDown(57)
b=KeyDown(32)-KeyDown(30)


If a>0 And air=0 Then
acv#=5
Else
acv#=acv#-0.3
EndIf
If acv#<-6 Then acv#=-6
If acv#>3 Then acv#=3
If b=0 ach=0




speedh#=ach#*5

speedv#=acv#*2.5


pny#=py#-speedv#
px#=pnx#

If pny<R2-100 Then 

py#=pny#

Else
acv=0

EndIf

If b<>0 And air=0 And ach=0 Then
ach#=1
ElseIf b<>0 And air=1 And ach=0
ach#=0.5 
EndIf
If air=0 And b<>0 ach=1

If b>0 Then
pnx=px+speedh
ElseIf b<0
pnx=px-speedh
EndIf




DrawImage player_image,R1/2,R2/2

Color 0,0,0
Text 0,0,px
Text 0,25,py
Text 0,50,acv
Text 0,75,ach
Text 0,100,air

If acv<>0 Then 
air=1
Else
air=0
EndIf
Color 255,255,255
Rect px-5,py-5,10,10,1
End Function
Решив проверить все переменные я вообще запутался. Оказывается, переменные px,py двигаются быстрее игрока, что ли. То есть, они двигаются в каком-то масштабе относительно игрока: когда квадратик с px;py находится в начале экрана, то и игрок находится в начале карты, когда в конце - игрок в конце и тд. , но визуально кажется что игрок медленнее квадратика. Это оптическая иллюзия, или вообще что это за такое и как это происходит?
Вложения
Тип файла: rar q.rar (1.6 Кб, 427 просмотров)
(Offline)
 
Ответить с цитированием
Старый 22.03.2012, 02:46   #248
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Vivo

Используй TAB, Люк!
(Offline)
 
Ответить с цитированием
Старый 22.03.2012, 11:44   #249
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Vivo

Игрок рисуется в центре экрана; пол рисуется в cx,cy; нижний кубик в px,py.

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

я знаю где что рисуется и что эти переменные значат( cx - camera_x, px - player_x), но я не знаю почему так происходит, что квадрат в рх ру быстрее игрока
(Offline)
 
Ответить с цитированием
Старый 23.03.2012, 18:41   #251
Markova
ПроЭктировщик
 
Аватар для Markova
 
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений
(для 218 пользователей)
Ответ: Vivo

Rect R1/2-(200),R2/2+(200),10,10,1 ne? =)) вот а так Rect px/5,py/2,10,10,1=) ) медленнее а что нужно получить
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!
(Offline)
 
Ответить с цитированием
Старый 23.03.2012, 19:15   #252
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

ничего получать не нужно, все хорошо работает, но я не понимаю как
(Offline)
 
Ответить с цитированием
Старый 23.03.2012, 19:51   #253
Markova
ПроЭктировщик
 
Аватар для Markova
 
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений
(для 218 пользователей)
Ответ: Vivo

Ну так дело не в квадрате, а в плеере, который привязан к курсору то есть стоящему в середине экрана DrawImage player_image,R1/2,R2/2 =) ) DrawImage player_image,R1/2+px,R2/2+py/3
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!
(Offline)
 
Ответить с цитированием
Старый 23.03.2012, 21:29   #254
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Я не понимаю почему px,py двигается быстрее чем игрок( если можно так выразится).
(Offline)
 
Ответить с цитированием
Старый 22.04.2012, 14:07   #255
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Vivo

Пока моделлер работает, заняться мне нечем, поэтому решил-ка я позаниматься этим проектам. По-сколько кроме быдлокода я ничего в исходниках не нашёл, решил писать всё заново, отказавшись от экранов. Они были удобны, но многие говорили что это убивает геймлей. В общем, помогите с выбором:
1). Делать 9 чанков размером с экран, чтобы они окружали текущий экран.
2). Делать уйму маленьких чанков.
3). Послать всех и оставить экраны
P.S. в первых двух случаях игрок находится всегда в центре экрана.
И ещё, вдруг у кого завалялась инфа по данной теме, поделитесь, буду признателен( тоже к двум первым случаям относится).
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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