- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚开始玩游戏模组,但遇到了瓶颈。我实际上是一名 C++ 程序员,但我目前所做的 retrofit 要求我使用 C#,这应该不是什么大问题,但我相当确定我错过了一些关键的 C# 概念。
我正在尝试将“删除”按钮绑定(bind)到使用“GetAsyncKeyState”递增变量的函数。我已经尝试了此函数的所有变体,对其进行类型转换等,但没有任何效果。下面是整个函数,还有一些示例说明我在下面再次尝试了哪些变体。
功能:
private void incModJump()
{
if (Convert.ToBoolean(Movement.GetAsyncKeyState(127) & 32768))
{
Thread.Sleep(150);
this.modJump += 1f;
this.modWallJump += 1f;
}
}
我尝试过的“if”语句的变体。
(这些都在使用和不使用“Convert.ToBoolean”的情况下进行了测试,均无效。)
if (GetAsyncKeyState(127) > 0)
if (GetAsyncKeyState(127) & 0x8000)
if (GetAsyncKeyState(127) & 0x8000 == 0x8000)
if (GetAsyncKeyState(127) & 32768)
if (GetAsyncKeyState(127) & -32768)
以上似乎都不起作用,我不知道如何实现此功能,我也查看了使用此功能的示例 C# 代码,所以我怀疑这是语法错误(编译器也会警告我。)
如前所述,我是一名 C++ 程序员,所以这可能是因为我对 C# 不太熟悉,因此我将包括我尝试修改的整个类,以防问题出在其他地方。我在这里触及的唯一代码是包含更多“使用” header 并添加 if 语句和函数中的变量。(请忽略有关 token 的注释部分,它们是由反编译器引起的。)
using System;
using System.Runtime.InteropServices;
using System.Threading;
using UnityEngine;
// Token: 0x0200007B RID: 123
public class Movement : MonoBehaviour
{
// Token: 0x06000282 RID: 642
private void Start()
{
this.fighting = base.GetComponent<Fighting>();
this.standing = base.GetComponent<Standing>();
this.info = base.GetComponent<CharacterInformation>();
this.controller = base.GetComponent<Controller>();
this.grabHandler = base.GetComponent<GrabHandler>();
this.au = base.GetComponentInChildren<AudioSource>();
BodyPart[] componentsInChildren = base.GetComponentsInChildren<BodyPart>();
this.rigidbodies = new Rigidbody[componentsInChildren.Length];
for (int i = 0; i < this.rigidbodies.Length; i++)
{
this.rigidbodies[i] = componentsInChildren[i].GetComponent<Rigidbody>();
}
this.screenshake = ScreenshakeHandler.Instance;
this.rightHand = base.GetComponentInChildren<RightHand>().GetComponent<Rigidbody>();
this.leftHand = base.GetComponentInChildren<LeftHand>().GetComponent<Rigidbody>();
}
// Token: 0x06000283 RID: 643
private void FixedUpdate()
{
this.flyVelocity *= 0.95f;
if (this.controller.canFly)
{
this.MoveFly(this.flyVelocity);
this.MoveFly(Vector3.up * 0.37f);
this.leftHand.AddForce(Vector3.down * 2000f * Time.fixedDeltaTime + Vector3.forward * 2000f * Time.fixedDeltaTime, ForceMode.Acceleration);
this.rightHand.AddForce(Vector3.down * 2000f * Time.fixedDeltaTime + Vector3.forward * -2000f * Time.fixedDeltaTime, ForceMode.Acceleration);
}
}
// Token: 0x06000284 RID: 644
private void MoveFly(Vector3 direction)
{
if (this.info.sinceFallen < 0f)
{
return;
}
Rigidbody[] array = this.rigidbodies;
for (int i = 0; i < array.Length; i++)
{
array[i].AddForce(direction * this.forceMultiplier * this.fighting.movementMultiplier * Time.deltaTime, ForceMode.Acceleration);
}
foreach (RigidbodyMovement rigidbodyMovement in this.rigsToMove)
{
rigidbodyMovement.rigidbody.AddForce(direction * rigidbodyMovement.forceMultiplier * this.fighting.movementMultiplier * Time.deltaTime, ForceMode.Acceleration);
}
}
// Token: 0x06000285 RID: 645
public void Fly(Vector3 direction)
{
this.flyVelocity += direction * Time.deltaTime * 10f;
}
// Token: 0x06000286 RID: 646
public void MoveRight()
{
if (this.info.sinceFallen < 0f)
{
return;
}
float num = 1f;
if (!this.controller.isAI)
{
num = Mathf.Abs((!this.controller.HasControl) ? ((this.standing.LeftStickYValue >= -0.5f) ? 0.6f : 0f) : this.controller.PlayerActions.Movement.X);
}
if (this.grabHandler.isHoldingSomething)
{
num *= 0.1f;
}
Rigidbody[] array = this.rigidbodies;
for (int i = 0; i < array.Length; i++)
{
array[i].AddForce(-Vector3.forward * this.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
foreach (RigidbodyMovement rigidbodyMovement in this.rigsToMove)
{
rigidbodyMovement.rigidbody.AddForce(-Vector3.forward * rigidbodyMovement.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
}
// Token: 0x06000287 RID: 647
public void Move(float direction)
{
if (this.info.sinceFallen < 0f)
{
return;
}
float num = 1f;
if (!this.controller.isAI)
{
num = Mathf.Abs(this.controller.PlayerActions.Movement.X);
}
if (this.grabHandler.isHoldingSomething)
{
num *= 0.1f;
}
Rigidbody[] array = this.rigidbodies;
for (int i = 0; i < array.Length; i++)
{
array[i].AddForce(direction * Vector3.forward * this.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
foreach (RigidbodyMovement rigidbodyMovement in this.rigsToMove)
{
rigidbodyMovement.rigidbody.AddForce(direction * Vector3.forward * rigidbodyMovement.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
}
// Token: 0x06000288 RID: 648
public void MoveLeft()
{
if (this.info.sinceFallen < 0f)
{
return;
}
float num = 1f;
if (!this.controller.isAI)
{
num = Mathf.Abs((!this.controller.HasControl) ? ((this.standing.LeftStickYValue >= -0.5f) ? 0.6f : 0f) : this.controller.PlayerActions.Movement.X);
}
if (this.grabHandler.isHoldingSomething)
{
num *= 0.1f;
}
Rigidbody[] array = this.rigidbodies;
for (int i = 0; i < array.Length; i++)
{
array[i].AddForce(Vector3.forward * this.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
foreach (RigidbodyMovement rigidbodyMovement in this.rigsToMove)
{
rigidbodyMovement.rigidbody.AddForce(Vector3.forward * rigidbodyMovement.forceMultiplier * this.fighting.movementMultiplier * num * Time.deltaTime, ForceMode.Acceleration);
}
}
// Token: 0x06000289 RID: 649
public bool Jump(bool force = false, bool forceWallJump = false)
{
bool result = this.DoJump(force, forceWallJump);
this.au.PlayOneShot(this.jumpClips[UnityEngine.Random.Range(0, this.jumpClips.Length)]);
return result;
}
// Token: 0x0600028A RID: 650
private bool DoJump(bool force = false, bool forceWallJump = false)
{
bool result = false;
this.standing.gravity = this.jumpTime * 0.5f;
float d = 0.3f;
foreach (Rigidbody rigidbody in this.rigidbodies)
{
rigidbody.velocity = new Vector3(rigidbody.velocity.x, 0f, rigidbody.velocity.z);
if (!force)
{
if (this.info.wallNormal != Vector3.zero)
{
rigidbody.AddForce(this.info.wallNormal * this.jumpForceMultiplier * this.modWallJump, ForceMode.VelocityChange);
rigidbody.AddForce(Vector3.up * this.jumpForceMultiplier * this.modWallJump, ForceMode.VelocityChange);
result = true;
}
else
{
rigidbody.AddForce(Vector3.up * this.jumpForceMultiplier * this.modJump, ForceMode.VelocityChange);
result = false;
}
}
else if (forceWallJump)
{
rigidbody.AddForce(this.info.wallNormal * d * this.jumpForceMultiplier * 0.75f, ForceMode.VelocityChange);
rigidbody.AddForce(Vector3.up * d * this.jumpForceMultiplier * 0.85f, ForceMode.VelocityChange);
}
else
{
rigidbody.AddForce(Vector3.up * d * this.jumpForceMultiplier, ForceMode.VelocityChange);
}
}
this.screenshake.AddShake(Vector3.up * 0.01f);
return result;
}
// Token: 0x060014F1 RID: 5361
private void incModJump()
{
if (Convert.ToBoolean(Movement.GetAsyncKeyState(127) & 32768))
{
Thread.Sleep(150);
this.modJump += 1f;
this.modWallJump += 1f;
}
}
// Token: 0x06001526 RID: 5414
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(int nVirtKey);
// Token: 0x040002CB RID: 715
public RigidbodyMovement[] rigsToMove;
// Token: 0x040002CC RID: 716
public float forceMultiplier;
// Token: 0x040002CD RID: 717
public float jumpForceMultiplier;
// Token: 0x040002CE RID: 718
public float jumpTime = 0.5f;
// Token: 0x040002CF RID: 719
private Standing standing;
// Token: 0x040002D0 RID: 720
private CharacterInformation info;
// Token: 0x040002D1 RID: 721
private Controller controller;
// Token: 0x040002D2 RID: 722
private GrabHandler grabHandler;
// Token: 0x040002D3 RID: 723
private Fighting fighting;
// Token: 0x040002D4 RID: 724
private Rigidbody[] rigidbodies;
// Token: 0x040002D5 RID: 725
private ScreenshakeHandler screenshake;
// Token: 0x040002D6 RID: 726
private AudioSource au;
// Token: 0x040002D7 RID: 727
public AudioClip[] jumpClips;
// Token: 0x040002D8 RID: 728
public Vector3 flyVelocity = Vector3.zero;
// Token: 0x040002D9 RID: 729
private Rigidbody leftHand;
// Token: 0x040002DA RID: 730
private Rigidbody rightHand;
// Token: 0x04001332 RID: 4914
private float modJump = 3f;
// Token: 0x04001333 RID: 4915
private float modWallJump = 3.75f;
}
如果这根本不可能,是否有任何其他方法可以实现此功能?
最佳答案
这是一个简单示例,说明如何在 C# 中使用 GetASyncKeyState() 检查是否按下了某个键。
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(Int32 vKey);
int VK_DELETE = 0x2E;
while (true)
{
short keyStatus = GetAsyncKeyState(VK_DELETE);
if ((keyStatus & 1) == 1)
{
//if you land here, the key was pressed
}
}
我们正在检查是否设置了最低有效位,请阅读 MSDN 上的评论以了解更多信息.这确保我们每次按键只执行一次,而不是每次轮询键状态时执行一次。正如其他人在评论中所说,GetASyncKeyState 有利于快速证明概念,但不适合专业用途。原因之一是因为它在所有应用程序中并不安全,其他应用程序可能会设置 GetASyncKeyState() 的结果并影响您的程序。
关于C# GetAsyncKeyState 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574045/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!