PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопрос


Вопрос

Сообщений 1 страница 8 из 8

1

Небольшая проблемка, при нажатии на ЛКМ, слишком часто и быстро происходит звук выстрела и тратятся патроны. Возможно как-нибудь сделать чтобы были задержки между выстрелами ? Пробывал вписывать Delay(), но только замедляет игру.     

Код:
If GetAsyncKeyState_(#VK_LBUTTON)
         p - 1
         If p => 0 
         PlaySound (5) 
             If SpriteCollision (4, x1, y1, 4, WindowMouseX(0), WindowMouseY(0)) 
             x1 = Random(1920)
             y1 = Random(1080)
             EndIf

          EndIf
         EndIf

Отредактировано Foreword (29.11.2012 20:10:07)

0

2

Всё очень просто:

Код:
EnableExplicit

Enumeration
  #window
EndEnumeration

#w = 640
#h = 480
#title = "PB Window"

#ms_per_shot = 1000

Procedure shot()
  Protected current_time.i = ElapsedMilliseconds()
  Static last_shot_time.i
  If last_shot_time + #ms_per_shot < current_time
    Debug "This is shot!"
    last_shot_time = current_time
  EndIf
EndProcedure

If OpenWindow(#window, #PB_Ignore, #PB_Ignore, #w, #h, #title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Default
        If GetAsyncKeyState_(#VK_LBUTTON)
          shot()
        EndIf
    EndSelect
  ForEver
EndIf

#ms_per_shot — время (в миллисекундах), данное на один выстрел.

0

3

Что-то ничего не получается, после добавления "EnableExplicit" стал жаловаться на все переменные которые я задавал

0

4

EnableExplicit добавляет необходимость строгого объявления переменных. Можно и без этой команды (хоть я и не рекомендую).

0

5

Уже что-то немного получается, выстрел происходит, звук есть, но как задать что-бы отнимал патроны при выстреле и отнимал жизни у цели. Если задать If shot(), то он просто стрелять без нажатия кнопки мыши.

Код:
If GetAsyncKeyState_(#VK_LBUTTON)
         shot() 
               p - 1
                       If p => 0  
                         If SpriteCollision (4, x1, y1, 4, WindowMouseX(0), WindowMouseY(0)) 
                           z - 10
                       EndIf
                         EndIf
                      EndIf

Где p - патроны, z - жизни цели.

Отредактировано Foreword (29.11.2012 23:14:58)

0

6

Foreword написал(а):

Если задать If shot(), то он просто стрелять без нажатия кнопки мыши.

shot() процедура всегда возвращает единицу, следовательно условие If shot() будет всегда выполняться.
Логично предположить, что отнимать патроны, проигрывать звук выстрела и просчитывать столкновения надо именно в момент выстрела, тобишь на строке Debug "This is shot!".

0

7

не получается :( пишу playsound(5) звук есть, а вот пишу p - 1 патроны не отнимаются

Код:
Procedure shot()
  Protected current_time.i = ElapsedMilliseconds()
  Static last_shot_time.i
  If last_shot_time + 200 < current_time
    Debug
    PlaySound (5)
    p - 1
    last_shot_time = current_time
  EndIf
EndProcedure

0

8

Foreword написал(а):

а вот пишу p - 1 патроны не отнимаются

Читай внимательно про локальные переменные в процедурах. http://pure-basic.narod.ru/docs/books/6.htm

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопрос