forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Flight (http://forum.boolean.name/showthread.php?t=16307)

undertaker 08.02.2012 18:27

Flight
 
Эта игра будет из себя представлять что-то на подобие gta1-2. Делается она в в blitz 3D(но сама игра 2D). Линии квестов ещё не существует. Проекту очень нужны програмисты и художники.
Управление WASD и стрелочки.

вот код игры
Код:

Graphics 1366,768,32,1

SetBuffer BackBuffer()

Global x=100
Global y=100
Global speed=3
Global zdorov=100
Global speedc=5
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
Global ground=LoadImage ("ground1.bmp")
Global house1=LoadImage ("house1.bmp")
Global bot=LoadImage("bot.bmp")
Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)

MaskImage player,0,0,10

TileImage ground,0,0,0

Function updateplayer()
DrawImage player,x,y
MidHandle player
DrawImage player,x,y
DrawImage ground,0,0
DrawImage house1,300,400
DrawImage car,555,cy

f=LoadFont ("courier",40,False,False,False)

MaskImage cursor,255,255,255

px=x+speed*deltax
py=y+speed*deltay

DrawImage player,x,y



 If x<0 Then x = 1366
 If x>1366 Then x = 0
 If y<0 Then y = 768
 If y>768 Then y = 0




cursorX=MouseX()
cursorY=MouseY()
DrawImage cursor,MouseX(),MouseY()




If KeyDown(200) Or KeyDown(17) Then
y=y-speed
DrawImage player,x,y
EndIf

If KeyDown(208) Or KeyDown(31)
y=y+speed
DrawImage player,x,y
EndIf


If KeyDown(203) Or KeyDown(30)
x=x-speed
DrawImage player,x,y
EndIf


If KeyDown(205) Or KeyDown(32)
x=x+speed
DrawImage player,x,y
EndIf





SetFont f
Color 255,0,0
Text 10,10,"health = "+ zdorov


;If x=332 Or x=300 Or y=400 Or y=432 Then speed=0
If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov=zdorov-4
If zdorov<0 Then DrawImage endd,0,0

 




End Function
While Not KeyDown(1)
updateplayer()
Flip
Cls


DrawImage polosa,538,83


If 1=1 Then cy=cy+speedc
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=5



 





Wend

End

Очень бы хотелось сделать векторное передвижение. Кто может, помогите(желательно на примере этой программы).

Spy4433 08.02.2012 18:39

Ответ: Flight
 
player_angle=atan2(mousex()-playerx,mousey()-playery)
playerx=playerx+cos(player_angle)
playery=playery+sin(player_angle)

вот вроде без ошибок должно быть дальше думаю сам докуришь
и кстати рисовать плеера я думаю надо только один раз
Код:

Graphics 1366,768,32,1

SetBuffer BackBuffer()

Global x=100
Global y=100
Global speed=3
Global zdorov=100
Global speedc=5
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
Global ground=LoadImage ("ground1.bmp")
Global house1=LoadImage ("house1.bmp")
Global bot=LoadImage("bot.bmp")
Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)

MaskImage player,0,0,10
TileImage ground,0,0,0

Function updateplayer()
DrawImage player,x,y
MidHandle player
DrawImage player,x,y
DrawImage ground,0,0
DrawImage house1,300,400
DrawImage car,555,cy
f=LoadFont ("courier",40,False,False,False)
MaskImage cursor,255,255,255
px=x+speed*deltax
py=y+speed*deltay
DrawImage player,x,y
If x<0 Then x = 1366
If x>1366 Then x = 0
If y<0 Then y = 768
If y>768 Then y = 0
cursorX=MouseX()
cursorY=MouseY()
DrawImage cursor,MouseX(),MouseY()
If KeyDown(200) Or KeyDown(17) Then
y=y-speed
DrawImage player,x,y
EndIf
If KeyDown(208) Or KeyDown(31)
y=y+speed
DrawImage player,x,y
EndIf
If KeyDown(203) Or KeyDown(30)
x=x-speed
DrawImage player,x,y
EndIf
If KeyDown(205) Or KeyDown(32)
x=x+speed
DrawImage player,x,y
EndIf
SetFont f
Color 255,0,0
Text 10,10,"health = "+ zdorov
;If x=332 Or x=300 Or y=400 Or y=432 Then speed=0
If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov=zdorov-4
If zdorov<0 Then DrawImage endd,0,0
End Function
While Not KeyDown(1)
updateplayer()
Flip
Cls
DrawImage polosa,538,83
If 1=1 Then cy=cy+speedc
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=5

Wend
End

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

undertaker 08.02.2012 18:59

Я раньше не создавал тему

А как векторное перемещение сделать?(на примере)

Nikich 08.02.2012 19:49

Ответ: Flight
 
код от Spy4433 не имеет смысла. Человек за мышкой двигаться не должен.

Spy4433 08.02.2012 20:21

Ответ: Flight
 
ну код от spy4433 имеет смысл т.к направление задается по углу
осталось только пошевелить "МОЗГОМ",а как будешь задавать этот угл неважно от мыши или от клавиш, а может от джостика


я так полагаю в итоге должно получится управление как в crimsonland?


Код:

if keyhit(UP) then
speedy#=-1
endif

playery#=playery#+speedy#
speedy=speedy*0.99


Nikich 08.02.2012 20:42

Ответ: Flight
 
в итоге должно получится совсем не так. Нажал вверх, идет вверх, нажал влево, идет влево. Так что угл вообще никого не волнует. Ему векторное перемещение сделать надо.

undertaker 08.02.2012 21:24

Ответ: Flight
 
А как сделать так, чтобы гг поворачивался за курсором, но шел на wasd?

Spy4433 08.02.2012 21:26

Ответ: Flight
 
картинку крутить но это тормзно!
можно сделать так
dim player(359)
for t=0 to 259
player(t)=loadimage("player.bmp")
rotateimage player(t),t
next

drawimage player(playerangl),playerx,playery

undertaker 08.02.2012 21:33

Ответ: Flight
 
Тогда будет просто одна картинка ворочаться? И как это прицепить к курсору?

Spy4433 08.02.2012 21:34

Ответ: Flight
 
что бы узнать угл я писал выше

player_angle=atan2(mousex()-playerx,mousey()-playery)

Nikich 08.02.2012 21:47

Ответ: Flight
 
Способ логичный, но плохо подходит к применению. Тут вся фишка в MaskImage. Дело в том, что она и так не очень хорошо маскирует цвета в сложных фигурах, а если еще и повернута картинка на 1 градус, то и вовсе кошмар будет. Я сам так делал, правда с у меня на 45 градусов, и вокруг главного героя была незакрашеная территория. Я это пофиксил тем, что маску поставил похожу на задний фон, но тебе это вряд ли подойдет.
Но тебе это еще рано, ты бы векторное перемещение сделал, для начала. И даешь людям демку с блэкджеком и шлюхами!

undertaker 08.02.2012 22:22

Ответ: Flight
 
В общем я завтра попробую сделать демку. С нормальным перемещением.

Nikich 08.02.2012 23:03

Ответ: Flight
 
А шлюхи и блэкджек уже есть?
И можно ли код в оффтоп поставить? Уж больно он места много занимает, мотать не удобно страницу.

Randomize 08.02.2012 23:28

Ответ: Flight
 
Так, ребята, этому в проектах не место.

undertaker 08.02.2012 23:43

Ответ: Flight
 
Почему?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot