| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖
标题:自动跟踪目标的旋转炮塔
取消只看楼主 加入收藏
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
自动跟踪目标的旋转炮塔
同样是写飞机游戏时用的。
程序代码:
Option Explicit
Private Type point
  X As Integer
  Y As Integer
End Type

Dim target As point
Dim cur_angle As Single
Dim r As Integer



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
  Case Is = 65
    target.X = target.X - 5
    If target.X < 0 Then target.X = 0
  Case Is = 68
    target.X = target.X + 5
    If target.X > 400 Then target.X = 400
  Case Is = 87
    target.Y = target.Y - 5
    If target.Y < 0 Then target.Y = 0
  Case Is = 83
    target.Y = target.Y + 5
    If target.Y > 400 Then target.Y = 400
End Select

 
End Sub

Private Sub Form_Load()
  target.X = 300
  target.Y = 300
  cur_angle = 1.5 * 3.14
  r = 25
  Timer1.Interval = 40
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'target.X = X
'target.Y = Y
End Sub

Private Sub Timer1_Timer()
  Form1.Cls
  Form1.Circle (target.X, target.Y), 5
  rotate
  Form1.Caption = cur_angle
End Sub

Function direction(x0, y0, x1, y1 As Integer) As Boolean
  Dim temp As Single
  If x0 = x1 And y1 >= y0 Then temp = 3.14 / 2: GoTo loop1
  If x0 = x1 And y1 < y0 Then temp = 1.5 * 3.14: GoTo loop1

  temp = Atn((y1 - y0) / (x1 - x0))
  If x1 < x0 Then temp = temp + 3.14
  If x1 > x0 And y1 < y0 Then temp = temp + 6.28
  direction = True 'count clockwise
loop1:
  Select Case cur_angle > 3.14
    Case Is = True
      If temp > cur_angle - 3.14 And temp < cur_angle Then direction = False 'clockwise
    Case Is = False
      If temp > cur_angle + 3.14 Or temp < cur_angle Then direction = False
  End Select
End Function

Sub rotate()
  Dim temp As Single
  Dim temp1 As Boolean
  temp1 = direction(200, 200, target.X, target.Y)
  Select Case temp1
    Case Is = False
      temp = -2 * 3.14 / 180
    Case Is = True
      temp = 2 * 3.14 / 180
  End Select
  cur_angle = cur_angle + temp
  If cur_angle > 6.28 Then cur_angle = cur_angle - 6.28
  If cur_angle < 0 Then cur_angle = cur_angle + 6.28
  Line1.X2 = 200 + r * Cos(cur_angle)
  Line1.Y2 = 200 + r * Sin(cur_angle)

End Sub
窗体中添加1个Timer控件,在窗体中间添加1个圆形的Shape1和1个Line1控件,如下图
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 lianyicq 于 2015-7-15 14:48 编辑 ]
搜索更多相关主题的帖子: 游戏 
2015-07-15 14:46
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
补充一下:键盘ADSW操纵目标移动

大开眼界
2015-07-15 14:50
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 3楼 wmf2014
不知道大家对什么感兴趣。
以前想到如何用VB6实现多个物体同时运动,先实现了象简单避障赛车的游戏,再实现了点的追踪,再有了这个闭门造车的结果。实现了目的,就失去了兴趣,没有再往下做。只是再用DX也实现了类似的效果。直接发工程吧,以前写的代码太随意,很不规范,根本也没完成。
三个工程都是两眼瞎写的,没有参考任何先例。rotate是这个旋转炮塔的,sky1是背景不变的,横版。AVG1是纵版,自己想办法写了出现敌机的脚本,可以任意创建敌机进入场景的模板,可以看看。
rotate.zip (2.68 KB)
sky1.zip (218.74 KB)
AVG1.zip (221.32 KB)

大开眼界
2015-07-16 11:29
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 5楼 wmf2014
想退出?没门!
没有动力继续了。

大开眼界
2015-07-16 12:06
快速回复:自动跟踪目标的旋转炮塔
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017094 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved