(VB)实施玩家射击活动的建议

时间:2015-08-14 14:20:04

标签: vb.net

我目前正在开发类似于街机射击游戏的Visual Basic游戏。玩家使用箭头键在屏幕上左右移动他们的船,同时他们拍摄'使用空格键。问题是,我不知道在哪里放置子弹的运动,所以它会不断移动(不仅仅是在按键事件上产生)并且由Render()函数更新。任何帮助或建议将不胜感激。

我目前的代码如下所示;这是我第一次使用游戏循环,所以如果有什么事情被滥用,我会道歉。

Public Class frmMain

'Diming drawing surface & controls
Dim g, bbg As Graphics
Dim backBuff As Bitmap
Dim keys(256) As Boolean
Dim clientWidth, clientHeight As Integer
Dim timer As Stopwatch
Dim interval, startTick As Long

'Diming playerShip
Dim playerSize As Long = 64
Dim playerShip As New Rectangle(180, 430, playerSize, playerSize)
Dim playerLoc As New Point(playerShip.Location)
Dim playerSpr As Image = My.Resources.sprPlayer
Dim playerSpeed As Long

'Diming playerBullet
Dim playerBulletWidth As Long = 9
Dim playerBulletHeight As Long = 20
Dim playerBullet As New Rectangle(playerLoc.X, playerLoc.Y - 20, playerBulletWidth, playerBulletHeight)
Dim playerBulletLoc As New Point(playerBullet.Location)
Dim playerBulletSpr As Image = My.Resources.sprPlayerBullet
Dim playerBulletSpeed As Long
Dim playerShoot As Boolean = False

Public Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Configuring specific properties of the form
    Me.DoubleBuffered = True
    Me.MaximizeBox = False
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Fixed3D
    'Me.BackColor = Color.Black

    'configuring timer controls
    interval = 16
    timer = New Stopwatch()

    'Assigning values to empty variables
    clientWidth = 450
    clientHeight = 550
    playerSpeed = 5
    playerBulletSpeed = 5

    'Configuring drawing surface
    g = Me.CreateGraphics
    backBuff = New Bitmap(clientWidth, clientHeight, Imaging.PixelFormat.Format32bppPArgb)
    bbg = Graphics.FromImage(backBuff)

    'Initially draw playerShip
    bbg.DrawImage(playerSpr, playerShip)
    'bbg.DrawImage(playerBulletSpr, playerBullet)
End Sub

Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    keys(e.KeyCode) = True
End Sub

Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    keys(e.KeyCode) = False
End Sub

Private Sub frmMain_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    GameLoop()
End Sub

Private Sub GameLoop()
    timer.Start()
    Do While (Me.Created)
        startTick = timer.ElapsedMilliseconds
        GameLogic()
        Render()
        Application.DoEvents()

        'Allows game to run at constant speed on different machines
        Do While timer.ElapsedMilliseconds - startTick < interval
        Loop
    Loop
End Sub

Private Sub GameLogic()
    'Spawning, movement & collision
    Dim keyPressed As Boolean = False

    'playerShip movement & shooting
    'Checks for no collision with form's right wall
    If Not playerShip.Location.X + playerSpeed > clientWidth - playerShip.Width - playerSpeed Then

        'Move playerShip right (right arrow)
        If keys(39) Then
            playerLoc = New Point(playerShip.Location.X + playerSpeed, playerShip.Location.Y)
            playerShip.Location = playerLoc
            keyPressed = True
        End If

    End If

    'Checks for no collision with form's left wall
    If Not playerShip.Location.X - playerSpeed < 0 Then

        'Move playerShip left (left arrow)
        If keys(37) Then
            playerLoc = New Point(playerShip.Location.X - playerSpeed, playerShip.Location.Y)
            playerShip.Location = playerLoc
            keyPressed = True
        End If

    End If

    'Launch bullet (space-bar)
    If keys(32) Then
        playerShoot = True
        keyPressed = True
        PlayerShipShoot()
    End If
End Sub

Private Sub PlayerShipShoot()
    'Add bullet activity here... maybe
End Sub

Private Sub Render()
    'Drawing playerShip & playerBullet
    bbg.DrawImage(playerSpr, playerShip)

    If playerShoot = True Then
        bbg.DrawImage(playerBulletSpr, playerBullet)
    End If

    'Drawing backBuff to the form
    g.DrawImage(backBuff, 0, 0)
    bbg.Clear(Color.Silver)
End Sub

结束班

感谢。

0 个答案:

没有答案