|
2D-программирование Вопросы, касающиеся двумерного программирования |
11.02.2012, 00:39
|
#31
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
Я хочу сделать, чтобы гг стрелял в сторону курсора, только ничего не получается подскажите, кто знает,заранее благодарен
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.02.2012, 00:52
|
#32
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,362
Написано 2,474 полезных сообщений (для 6,860 пользователей)
|
Ответ: Flight
Сообщение от undertaker
Я хочу сделать, чтобы гг стрелял в сторону курсора, только ничего не получается подскажите, кто знает,заранее благодарен
|
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
Данные ф-ции надо вызывать в главном цикле.
Большая просьба - изучи, подумай как это работает.
* мог что-либо напутать. Писал в браузере. На блице давно ничего не писал.
__________________
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)
|
|
Эти 3 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
11.02.2012, 11:58
|
#33
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Да, там наверное не "Eachin", а просто "Each"(на сколько я знаю "Eachin" это в BlitzMax). Но я могу ошибаться, так как сам всегда "Each" пользуюсь.
|
(Offline)
|
|
11.02.2012, 12:03
|
#34
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
Чет все равно не особо получается
|
(Offline)
|
|
11.02.2012, 12:09
|
#35
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
|
(Offline)
|
|
11.02.2012, 13:41
|
#36
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
Конечно
|
(Offline)
|
|
11.02.2012, 14:19
|
#37
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Кидай весь код.
|
(Offline)
|
|
11.02.2012, 15:23
|
#38
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: 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(20 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
|
(Offline)
|
|
11.02.2012, 15:24
|
#39
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
не знаю, куда это присобачить(((помогите
|
(Offline)
|
|
11.02.2012, 16:27
|
#40
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Так ты ведь ничего не вставил. Если кода нету он работать не будет.
|
(Offline)
|
|
11.02.2012, 16:43
|
#41
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: 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(20 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 - вот как-то так. но не работает. за ошибки не судите строго, я еще начинающий. помогите пожалуйста
|
(Offline)
|
|
11.02.2012, 17:20
|
#42
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Тут очевидная ошибка. Ты пулю создаёшь просто так. Надо
Local b.TBullet = New TBullet
bx = x
by = y
angle = fang
после If mousedown(1) then ставить.
|
(Offline)
|
|
11.02.2012, 17:50
|
#43
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
If MouseDown(1) Then
Local b.Tbullet=New Tbullet
bx=x
by=y
angle = fang
EndIf Wend
|
(Offline)
|
|
11.02.2012, 17:52
|
#44
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
И ничего
|
(Offline)
|
|
11.02.2012, 17:59
|
#45
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Кинь картинки и .bb файл, я посмотрю что не так.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:11.
|