Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多人使用VB.NET中的事件玩游戏

多人使用VB.NET中的事件玩游戏
EN

Stack Overflow用户
提问于 2012-12-29 20:08:14
回答 3查看 526关注 0票数 2

我正在创建一个这样的游戏,其中有两个玩家,每个人控制他们各自独立的积木,上下移动,还有一个球在周围弹跳,目的是让球在玩家的单位后面并触摸墙壁(这是Wii Play上的游戏,如果这有帮助=D)

我面临的问题是我使用事件,比如Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown。很简单的东西。

以前,我只做过单人游戏,所以这不是什么大问题(但它阻止了我的对角移动等,因为两个独立的事件没有一起处理,它们是单独处理的)。那么问题是什么呢?那么两个玩家,同时按多个键,怎么处理呢?

TL;DR:有多个关键事件同时发生。我如何一次处理所有这些问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-29 20:29:12

有多种方法可以做到这一点。当同时按下多个键时,将多次引发Form.KeyDown事件,每个键一次,因此您可以在引发KeyDownKeyUp事件时跟踪每个键的当前状态。或者,您也可以通过使用Application.AddMessageFilter方法将KeyMessageFilter添加到应用程序的消息筛选器中来执行类似的操作。像这样跟踪每个键的状态可能是有意义的,如果你必须检查许多键并经常这样做,然而,更简单的方法,也可能是同样有效的方法,就是根据需要使用Joseph Lee推荐的Keyboard.IsKeyDown方法(.NET Framework3.0及更高版本),或者使用user32.dll ( 3.0版之前的框架)中的Win32 API调用GetKeyState来检查每个键的状态。

在下面的评论中回答你的问题,user32.dll是一个标准的windows库。它是统称为Win32应用程序接口的标准库列表中的一个。它和Windows一样存在了很长时间,甚至在95年之前。它是一个非托管库,简单地说,这意味着它不是用.NET编写的,也不使用.NET框架。它们本质上是您与Windows操作系统直接通信的方式。

.NET框架中提供的许多方法都只是对旧的Win32应用编程接口调用的包装。如果.NET框架中的托管类提供了相同的功能,您几乎总是希望使用它而不是Win32应用编程接口调用。托管库比Win32应用编程接口更受欢迎的原因有很多:

  • 理想情况下,.NET应用程序应该是独立于操作系统的。如果调用Windows调用,则应用程序只能在Win32下运行,更具体地说,只能在专门支持该API调用的Windows版本下运行。
  • 调用非托管代码需要一些幕后数据封送处理,因此速度不如调用托管代码快。necessary.
  • The框架中的许多方法完全是在托管代码中实现的,因此对非托管代码的幕后调用实际上是.NET托管库更易于使用。它们是面向对象的,并且使用标准数据类型。许多API调用使用指针和自定义结构,这会使调用它们变得困难,尽管不是不可能。

因此,如果您是在3.0版或更高版本的框架上开发应用程序,我建议您使用Keyboard类,因为它是托管代码。除非其他选项对您不起作用,否则我只会使用Win32应用程序接口。

票数 1
EN

Stack Overflow用户

发布于 2012-12-29 20:21:20

假设您是通过Windows应用程序(而不是网站)执行此操作。

要同时处理多个按键,您不能通过Key事件执行此操作。相反,创建一个触发/执行函数的Timer对象(非常快)。在该函数中,使用System.Windows.Input命名空间中键盘类,特别是isKeyDown()方法。

代码语言:javascript
运行
AI代码解释
复制
If Keyboard.IsKeyDown(Key.Up) And Keyboard.IsKeyDown(Key.Right) Then
    'Do something to move Up-right
End If

干杯。

票数 2
EN

Stack Overflow用户

发布于 2012-12-29 20:21:48

我听说人们在游戏中使用GetAsyncKeyState来处理按键。这是我给你的一个小例子:

代码语言:javascript
运行
AI代码解释
复制
Imports System.Runtime.InteropServices

Public Class Form1
    <DllImport("user32.dll")> _
    Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
    End Function
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim keyhandler As New Threading.Thread(AddressOf handlekeys)
        keyhandler.Start()
    End Sub

    Sub handlekeys()
        While True
            If GetAsyncKeyState(Keys.Up) Then
                'do something if up arrow key is being pressed
            ElseIf GetAsyncKeyState(Keys.Down) Then
                'do something if down arrow key is being pressed
            End If
            Threading.Thread.Sleep(1)
        End While

    End Sub
End Class

这允许您一次处理多个密钥。此外,您可以使用计时器而不是带睡眠的线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14085467

复制
相关文章
C# 和vb.net事件
vb.net中的事件 ''' <summary> ''' 申明代理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Delegate Sub myEvnetHandler()Sub myEvnetHandler(ByVal sender As Object, ByVal e As EventArgs) ''' <summary> ''' 創建事件發布者
跟着阿笨一起玩NET
2018/09/18
1K0
VB.NET 为Treeview控件每个节点绑定独立的事件
  TreeView树状控件,在日常开发中我们会经常用到,但是我们在使用的过程中,想要点击某个节点触发某个过程方法;我们(哦不,是我自己)日常的做法,是使用节点点击事件(NodeMouseClick或者AfterSelect)去根据节点名称Name或者节点Text逐一判断然后触发某个过程,不能把每个节点当作一个按钮来操作;
办公魔盒
2021/07/23
1.6K0
探秘VB.net中的shared与static
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/28230345
DannyHoo
2018/09/13
2.2K0
探秘VB.net中的shared与static
团队开发中git的基本使用和多人协作合并管理
最近忙于公司内部流程审批系统,团队在我未入职公司前,一直未使用版本控制,导致多数人不会使Git,开发人员对Git不熟练,项目版本控制受阻(开发人员普遍觉得sftp方便); 由我编写开发文档规范: 开发规范文档(包括:Php、Git、Mysql);
陈大剩博客
2023/03/06
4250
关于mui 中开发App中fire事件的使用
想解决的问题 你是不是想在混合开发中子页面返回父页面中触发父页面的事件 首先你得对mui开发混合app有所了解,然后你就会知道,其实坑特别多 先创建一个H5+APP就是下面这样样子 然后就按照
我乃小神神
2019/03/20
9500
关于mui 中开发App中fire事件的使用
VB.NET 数组的定义 动态使用 多维数组
我们都知道在全部程序设计语言中数组都是一个非常重要的概念,数组的作用是同意程序猿用同一个名称来引用多个变量,因此採用数组索引来区分这些变量。非常多情况下利用数组索引来设置一个循环,这样就能够高效地处理复杂的情况,因此在非常多情况下,使用数组能够缩短或者简化程序的代码。本文主要介绍VB.NET数组的使用,希望对大家的使用带来帮助。
全栈程序员站长
2022/07/13
3.5K0
selec/poll中的读写事件和epoll中的读写事件
在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明: [cpp] view pl
李海彬
2018/03/22
3.2K0
Spring中的事件
文章目录 1. 简介 2. 事件 2.1. Spring中内置的事件 2.2. 自定义事件 3. 监听器 3.1. 实现ApplicationListener接口 3.2. 使用@EventListener注解 4. 事件发布 4.1. Spring的事件发布类 4.2. 直接注入 4.3. 使用ApplicationEventPublisherAware注入 5. 事件多播器 6. 异步事件 6.1. 使用@Async实现异步 6.2. 自定义事件多播器 7. 源码解析 简介 学过编程语言的肯定知道事
爱撒谎的男孩
2019/12/31
1.3K0
在处理PowerBuilder的itemchanged事件中,acceptText的使用介绍[通俗易懂]
在窗口的itemchanged事件中,获取当前输入的值时,往往是无法拿到值的,此时值还没有提交,
全栈程序员站长
2022/09/06
1.3K0
git的基本使用和多人协作合并管理
配置SSH 在bash中执行以下命令:ssh-keygen -t rsa -C '522864637@qq.com',然后一路按回车
Tz一号
2020/09/10
5820
react中的事件绑定
React中的事件绑定是将事件处理函数与组件的交互操作关联起来的过程。通过事件绑定,我们可以在React组件中响应用户的交互,并进行相应的操作。
堕落飞鸟
2023/05/19
3.1K0
GridView中DropDownList的事件
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList drp = sender as DropDownList; GridViewRow row = drp.NamingContainer as GridViewRow; // GridView 中对应的行
全栈程序员站长
2022/10/01
5980
Redis 中的事件驱动
上一篇文章中,我们介绍了编程思想中的 Reactor 与 Proactor 两种设计模式: 程序设计中的两大经典模式 — Reactor & Proactor
用户3147702
2022/06/27
9900
Redis 中的事件驱动
iOS 中的事件响应
iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论。
CoderStar
2022/08/24
2.8K0
iOS 中的事件响应
js中的事件(event)
我们可以简单的把事件理解为浏览器的感知系统。比如说:他可以感觉到用户是否点击(click)了页面、鼠标是否进入了页面的某个元素上面(mouseover或mouseenter)、鼠标是否离开了网页(mouseout或mouseleave)、浏览器是都加载完了页面上的资源(window.onload)、文档树是否生成(DOMContentLoaded)、键盘上的某个键是否按下(keydown)、鼠标的滚轮是否滚动了等等。
山河木马
2019/03/05
7K0
vb.net从数据库中取数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155767.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
2.1K0
vb.net从数据库中取数据
Vue中的@keyup事件
@keyup 事件常用的场景:登录页面可以使用该事件,当输入账号和密码后,无需点击登录按钮,绑定@keyup.enter="方法()",直接在输入密码以后回车完成登录,以增加用户体验 !
乐心湖
2020/07/31
3.1K0
AKKA中的事件流
在《企业应用集成模式》一书中,定义了许多与消息处理有关的模式,其中运用最为广泛的模式为Publisher-Subscriber模式,尤其是在异步处理场景下。 基于Publisher-Subscriber模式,还可以根据不同的场景衍生出特殊的模式,例如针对一个Publisher和多个Subscriber,演化为Broadcast模式和Message Router模式。前者会将消息同时发送给所有的Subscriber,实现分布式的并行处理。例如针对订单处理的场景,当顾客下订单后,既需要生成订单,又需要通知库存准
张逸
2018/03/07
1.9K0
点击加载更多

相似问题

谷歌玩游戏-基于转弯还是实时多人API?

12

如何使用blockly事件实现多人协作!

127

QuickGame在谷歌玩游戏多人游戏-一定在我的谷歌圈内?

12

谷歌玩游戏实时多人如何获得快速匹配播放器的名字?

14

用户玩游戏时的事件处理程序

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文