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

复制
相关文章
使用此 Microsoft Sentinel 工作簿获得动手 KQL
Kusto 查询语言 (KQL) 是使用 Microsoft Sentinel 的驱动语言。尽管类似于 SQL,但新用户仍必须学习和练习该语言。为了帮助加速学习语言,我们创建了一个交互式学习工作簿。当前版本将帮助新用户或现有用户对语言有 100-200 级的理解,同时还提供实践经验,帮助他们在执行现实世界的查询时迅速上手。
Khan安全团队
2022/01/14
1.8K0
WPF 设置元素为 Collapsed 是否会创建此元素
在 WPF 的 XAML 中,如果将某个元素初始的时候设置 Visibility 为 Collapsed 的值,那么意味着这个元素将不会参与布局,就和不存在是一样的。那么这个元素是否会被创建在内存中?是会创建的
林德熙
2020/11/27
1.1K0
元素弹性布局
table布局在早期是很流行的,因为使用table布局的表格结构清晰,易于理解,表格结构支持行列跨度,可以实现复杂的布局,但是他也有缺点,不利于SEO,复杂的页面代码也非常复杂,难以维护,不支持响应式布局,在移动端上不能很好的适配
云叶知秋
2023/10/16
1340
元素弹性布局
【HTML】HTML5 <div>元素布局的使用
标签可以把文档分割为独立的、不同的部分。它可以用作严格的组织工具,并且不使用任何格式与其关联。
梦溪
2021/08/09
4.1K0
Mybatis的sql映射文件的顶级元素使用实例
Mybatis是是一款优秀的持久层框架(持久化是程序数据在瞬时状态和持久状态间转换的过程。),在dao层大量使用,使sql语句封装在配置文件中,降低程序的耦合度。
jiankang666
2022/05/13
5080
Mybatis的sql映射文件的顶级元素使用实例
js通过class name获得元素
//原理: 用document.getElementsByTagName('*');来获取所有元素,然后取得相同Class的元素。 function getElementsByClassName(n) { var classElements = [], allElements = document.getElementsByTagName('*'); for (var i = 0; i < allElements.length; i++) { if (allElements[
sunsky
2020/08/20
8.9K0
Java 如何从一个 List 中随机获得元素
从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。
HoneyMoose
2022/05/07
1.8K0
Java 如何从一个 List 中随机获得元素
Java 如何从一个 List 中随机获得元素
从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。
HoneyMoose
2022/04/29
2K0
Java 如何从一个 List 中随机获得元素
Map映射如何使用迭代器?
迭代器只针对集合类型的数据,因此map类型的必须先转换成集合类型才能使用迭代器去获取元素。
孙晨c
2019/11/21
1.2K0
Mybatis的sql映射文件的顶级元素使用实例(超级详细)
Mybatis是是一款优秀的持久层框架(持久化是程序数据在瞬时状态和持久状态间转换的过程。),在dao层大量使用,使sql语句封装在配置文件中,降低程序的耦合度。
jiankang666
2022/05/12
4130
Mybatis的sql映射文件的顶级元素使用实例(超级详细)
物流巨头顺丰如何布局AI?这是其AI首席科学家的详细解读
随着人工智能的发展,一些物流公司也纷纷尝试利用人工智能技术优化物流环节,提高物流效率。就人工智能将如何改变物流业?物流领域人工的岗位和人工智能之间的关系是什么? 在2018网易经济学家年会“人工智能与人类未来”分论坛上,顺丰人工智能首席科学家刘志欣表示,人工智能技术的发展,实际上是让原有的算法更加高效,而这个算法本身和人工的岗位是共生互补的,它是一个工具,不会取代人的工作。 顺丰AI首席科学家 刘志欣 他认为,物流领域是一个高需求、大流量的方向,这里面本身就会有大量的工作岗位出现。回归人工智能的本质,它
企鹅号小编
2018/02/24
1.3K0
物流巨头顺丰如何布局AI?这是其AI首席科学家的详细解读
seaborn画风和主题风格
本文中的主要知识点: seaborn画风的使用 怎么隐藏刻度线 多个子图怎么使用不同的风格 刻度轴上的数值大小和线条粗细设置 import seaborn as sns # seaborn是对matplotlib的基础上进行了封装 import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline ---- 默认画风 def sinplot(flip=1): x = np.l
皮大大
2021/03/02
8810
CSS 布局_3 Position元素定位
我们之前已经介绍过行元素,块元素及行内块元素的属性了,能够知道它们是具有自己默认的显示方式的,即元素会按照文档流 (document flow) 的方式,自上而下,从左到右进行布局,如果你想要改变元素默认的定位行为,就需要设置 position 属性了
Nian糕
2018/08/21
9480
CSS 布局_3 Position元素定位
【CSS布局】Flex布局中元素换行设置间距问题
1. 父元素定高的情况下,直接使用 align-content: space-between;
且陶陶
2023/04/12
5.8K0
【CSS布局】Flex布局中元素换行设置间距问题
Pages 无法使用此AppleID更新
无法更新是因为这个应用并没有绑定到已经登录的AppleID中,点击已购,会提示有应用需要接受,点击全部接受。输入几次密码之后再次更新就ok了、
obaby
2023/02/23
1K0
【CSS 学习笔记】CSS元素和布局
其中 margin 称为外边距,在计算元素整体宽高的时候一般不包括它。CSS3 中新增了一个属性 box-sizing,可以用来指定使用的盒模型计算方式。下面是 CSS3 中支持的盒模型计算方式(CSS2种只支持默认的)
零式的天空
2022/03/22
1.1K0
如何使用Hibernate映射文件将Java类映射到数据库表
上述示例中,<class>元素定义了Employee类和Department类与数据库表的映射关系,<id>元素定义了主键字段的映射,<property>元素定义了普通字段的映射,<many-to-one>元素定义了多对一关系的映射。
堕落飞鸟
2023/05/15
1.2K0
点击加载更多

相似问题

如何获得此布局?

10

如何获得此布局?

40

如何获得此xml android布局

10

使浮动元素在列布局中顺行以满足上面的元素

13

如何在Tkinter中获得此布局?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文