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 11.02.2012 00:39

Ответ: Flight
 
Я хочу сделать, чтобы гг стрелял в сторону курсора, только ничего не получается:( подскажите, кто знает,заранее благодарен

Randomize 11.02.2012 00:52

Ответ: Flight
 
Цитата:

Сообщение от undertaker (Сообщение 219156)
Я хочу сделать, чтобы гг стрелял в сторону курсора, только ничего не получается:( подскажите, кто знает,заранее благодарен

1) Узнаём угол поворота от игрока до курсора
Код:

Local fang# = ATan2(MouseY() - player_y, MouseX() - player_x)
Где player_x и player_y координаты игрока.

2) Зная угол мы можем создавать пули
Абстрактно пули у нас такие:
Код:

Type TBullet
  Field x#, y#, angle#
End Type

angle# - угол поворота пули

Создавать новую будем так:
Код:

Local b.TBullet = New TBullet
b.x = player_x
b.y = player_y
b.angle = fang ; Это там раньше у нас угол который мы получали

3) Отлично! Пуля создана теперь надо её "оживить"
Код:

Function TBullet_Update()
  For b.TBullet = Eachin TBullet
      b\x = b\x + Cos( b\angle ) * 2 ;- поменяй, это скорость пули
      b\y = b\y + Sin( b\angle ) * 2 ;- это тоже :)

      ; Проверяем если пуля улетела за экран то удаляем
      If b\x<0 Or b\x>GraphicsWidth() Or b\y<0 Or b\y>GraphicsHeight() Then
            Delete b
      End If
  Next
End Function

Function TBullet_Draw()
  For b.TBullet = Eachin TBullet
      Oval(b\x - 3, b\y - 3, 6, 6)
  Next
End Function

Данные ф-ции надо вызывать в главном цикле.
Большая просьба - изучи, подумай как это работает.

* мог что-либо напутать. Писал в браузере. На блице давно ничего не писал.

Nikich 11.02.2012 11:58

Ответ: Flight
 
Да, там наверное не "Eachin", а просто "Each"(на сколько я знаю "Eachin" это в BlitzMax). Но я могу ошибаться, так как сам всегда "Each" пользуюсь.

undertaker 11.02.2012 12:03

Ответ: Flight
 
Чет все равно не особо получается

Nikich 11.02.2012 12:09

Ответ: Flight
 
Код:

if mousedown(1) then
...

Ставил?

undertaker 11.02.2012 13:41

Ответ: Flight
 
Конечно

Nikich 11.02.2012 14:19

Ответ: Flight
 
Кидай весь код.

undertaker 11.02.2012 15:23

Ответ: Flight
 
Graphics 1366,768,32,1

SetBuffer BackBuffer()



Type player
Field x,px,deltax
Field y,py,deltay
End Type


Type car
Field x,px,deltax
Field y,py,deltay
End Type

Type bullet
Field bulletx
Field bullety
End Type




Global bx=140
Global by=100
Global chn=Rnd(4)
Global w=LoadImage("w.bmp")
Global bullet=LoadImage("shot.bpm")
Global dmgC#
Global y=100
Global x=100
Global speed#=3
Global zdorov#=100
Global speedc#=5
Global hp100=LoadImage("hp100.bmp")
Global hp80=LoadImage("hp80.bmp")
Global hp60=LoadImage("hp60.bmp")
Global hp40=LoadImage("hp40.bmp")
Global hp20=LoadImage("hp20.bmp")
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
TFormFilter enable=0
RotateImage player,90
MidHandle player
Global ground=LoadImage ("ground1.bmp")

Global house1=LoadImage ("house1.bmp")
Global house2=LoadImage ("house2.bmp")


Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
Dim playerg(361)
For t=0 To 361
playerg(t)=CopyImage(player)
MaskImage playerg(t),0,0,0
RotateImage playerg(t),t
Next

MaskImage hp100,255,255,255
MaskImage hp80,255,255,255
MaskImage hp60,255,255,255
MaskImage hp40,255,255,255
MaskImage hp20,255,255,255

MaskImage player,0,0,10

TileImage ground,0,0,0

Function updateplayer()
player_angle=ATan2(MouseY()-y,MouseX()-x)+180

DrawImage ground,0,0
DrawImage w,700,100

DrawImage house1,300,340
DrawImage house2,750,340
DrawImage house2,-200,340
DrawImage house1,750,340
DrawImage house2,1250,340
DrawImage house2,750,-90
DrawImage house2,950,-90
DrawImage house2,15,-90
DrawImage house2,0,-90

DrawImage car,555,cy

MaskImage cursor,255,255,255


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

DrawImage playerg(Int(player_angle)),x,y
Text 0,10,player_angle

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
deltay=-1

EndIf

If KeyDown(208) Or KeyDown(31)
deltay=1

EndIf

If KeyDown(203) Or KeyDown(30)

deltax=-1
EndIf

If KeyDown(205) Or KeyDown(32)
deltax=1

EndIf

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

;DrawImage house1,300,340
;DrawImage house2,750,340
;DrawImage house2,-200,340
;DrawImage house1,750,340
;DrawImage house2,1250,340
;DrawImage house2,750,-90
;DrawImage house2,950,-90
;DrawImage house2,15,-90
;DrawImage house2,0,-90


If Not ImagesCollide (house1,300,340,0,player,px,py,0)
x=px
y=py
EndIf





If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov#=zdorov#-2
If zdorov#>80 And zdorov#=<100 Then DrawImage hp100,5,5
If zdorov#>60 And zdorov#=<80 Then DrawImage hp80,5,5
If zdorov#>40 And zdorov#=<60 Then DrawImage hp60,5,5
If zdorov#>20 And zdorov#=<40 Then DrawImage hp40,5,5
If zdorov#>0 And zdorov#=<20 Then DrawImage hp20,5,5
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








If MouseDown(1) Then
For bullety=1 To 5000
bulletx=Tan(player_angle)*bullety
DrawImage bullet,bulletx,bullety
Next


EndIf Wend

undertaker 11.02.2012 15:24

Ответ: Flight
 
не знаю, куда это присобачить(((помогите

Nikich 11.02.2012 16:27

Ответ: Flight
 
Так ты ведь ничего не вставил. Если кода нету он работать не будет.

undertaker 11.02.2012 16:43

Ответ: Flight
 
Graphics 1366,768,32,1

SetBuffer BackBuffer()



Type player
Field x,px,deltax
Field y,py,deltay
End Type


Type car
Field x,px,deltax
Field y,py,deltay
End Type

Type TBullet
Field bx#, by#, angle#
End Type

Function TBullet_Update()
For b.TBullet = Each TBullet
bx = bx + Cos( b\angle ) * 2
by = by + Sin( b\angle ) * 2

If bx<0 Or bx>GraphicsWidth() Or by<0 Or by>GraphicsHeight() Then
Delete b
End If
Next
End Function

Function TBullet_Draw()
For b.TBullet = Each TBullet
Oval(bx - 3, by - 3, 6, 6)
Next
End Function


Global bx=140
Global by=100
Global chn=Rnd(4)
Global w=LoadImage("w.bmp")
Global Tbullet=LoadImage("shot.bpm")
Global dmgC#
Global y=100
Global x=100
Global speed#=3
Global zdorov#=100
Global speedc#=5
Global hp100=LoadImage("hp100.bmp")
Global hp80=LoadImage("hp80.bmp")
Global hp60=LoadImage("hp60.bmp")
Global hp40=LoadImage("hp40.bmp")
Global hp20=LoadImage("hp20.bmp")
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
TFormFilter enable=0
RotateImage player,90
MidHandle player
Global ground=LoadImage ("ground1.bmp")

Global house1=LoadImage ("house1.bmp")
Global house2=LoadImage ("house2.bmp")


Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
Dim playerg(361)
For t=0 To 361
playerg(t)=CopyImage(player)
MaskImage playerg(t),0,0,0
RotateImage playerg(t),t
Next

MaskImage hp100,255,255,255
MaskImage hp80,255,255,255
MaskImage hp60,255,255,255
MaskImage hp40,255,255,255
MaskImage hp20,255,255,255

MaskImage player,0,0,10

TileImage ground,0,0,0

Function updateplayer()
player_angle=ATan2(MouseY()-y,MouseX()-x)+180

DrawImage ground,0,0
DrawImage w,700,100

DrawImage house1,300,340
DrawImage house2,750,340
DrawImage house2,-200,340
DrawImage house1,750,340
DrawImage house2,1250,340
DrawImage house2,750,-90
DrawImage house2,950,-90
DrawImage house2,15,-90
DrawImage house2,0,-90

DrawImage car,555,cy

MaskImage cursor,255,255,255


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

DrawImage playerg(Int(player_angle)),x,y
Text 0,10,player_angle

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
deltay=-1

EndIf

If KeyDown(208) Or KeyDown(31)
deltay=1

EndIf

If KeyDown(203) Or KeyDown(30)

deltax=-1
EndIf

If KeyDown(205) Or KeyDown(32)
deltax=1

EndIf

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

;DrawImage house1,300,340
;DrawImage house2,750,340
;DrawImage house2,-200,340
;DrawImage house1,750,340
;DrawImage house2,1250,340
;DrawImage house2,750,-90
;DrawImage house2,950,-90
;DrawImage house2,15,-90
;DrawImage house2,0,-90


If Not ImagesCollide (house1,300,340,0,player,px,py,0)
x=px
y=py
EndIf





If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov#=zdorov#-2
If zdorov#>80 And zdorov#=<100 Then DrawImage hp100,5,5
If zdorov#>60 And zdorov#=<80 Then DrawImage hp80,5,5
If zdorov#>40 And zdorov#=<60 Then DrawImage hp60,5,5
If zdorov#>20 And zdorov#=<40 Then DrawImage hp40,5,5
If zdorov#>0 And zdorov#=<20 Then DrawImage hp20,5,5
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









Local fang# = ATan2(MouseY() - y, MouseX() - x)
Local b.TBullet = New TBullet
bx = x
by = y
angle = fang ;
If MouseDown(1) Then Tbullet_update()
If MouseDown(1) DrawImage tbullet,bx,by

Wend - вот как-то так. но не работает. за ошибки не судите строго, я еще начинающий. помогите пожалуйста

Nikich 11.02.2012 17:20

Ответ: Flight
 
Тут очевидная ошибка. Ты пулю создаёшь просто так. Надо
Код:

Local b.TBullet = New TBullet
 bx = x
 by = y
 angle = fang

после If mousedown(1) then ставить.

undertaker 11.02.2012 17:50

Ответ: Flight
 
If MouseDown(1) Then
Local b.Tbullet=New Tbullet
bx=x
by=y
angle = fang

EndIf Wend

undertaker 11.02.2012 17:52

Ответ: Flight
 
И ничего

Nikich 11.02.2012 17:59

Ответ: Flight
 
Кинь картинки и .bb файл, я посмотрю что не так.


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

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