《Lua游戏AI开发指南》一2.8 发射方块

简介:
+关注继续查看

本节书摘来异步社区《Lua游戏AI开发指南》一书中的第2章,第2.8节,作者: 【美】David Young(杨) 译者: 王磊 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.8 发射方块

现在我们有了基本的光照和一个物理平面,还能创建和模拟物理对象,是时候发射一些东西了。在开始创建智能体之前,先让我们快速了解一下沙箱对象的另外一些物理属性,以及如何与输入控制器进行交互。

Sandbox_HandleEvent函数让沙箱能够响应鼠标和键盘输入事件。事件参数是一个Lua表,存储了事件的生成来源、事件是由按下还是松开按钮产生的以及事件是哪个键产生的这类信息。鼠标移动事件也类似,但包含了鼠标指针的宽高位置。

我们已经知道如何创建一个沙箱对象了,要发射一个对象只需要把它放置在相机的位置,然后对它施加一个物理冲击。

现在我们打算在接收到空格键按下事件时创建并发射一个方块。相机的位置和朝向可以从沙箱中的Sandbox.GetCameraPositionSandox.GetCameraForward函数获取到。我们会把位置和朝向赋值给方块并对它沿相机面对的方向施加一个力。为了给物体添加一点自转,你可以使用Core.ApplyAngularImpulse函数来让它在飞向天空时开始自转。

Sandbox.lua:

   function Sandbox_HandleEvent(sandbox, event) 
       if (event.source == "keyboard" and
           event.pressed and event.key == "space_key" ) then

           local block = Sandbox.CreateObject( 
               sandbox,
               "models/nobiax_modular/modular_block.mesh");

           local cameraPosition = 
               Sandbox.GetCameraPosition(sandbox);
           -- Normalized forward camera vector. 
           local cameraForward =
               Sandbox.GetCameraForward(sandbox);
           -- Offset the block's position in front of the camera. 
           local blockPosition =
               cameraPosition + cameraForward * 2;
           local rotation = Sandbox.GetCameraOrientation(sandbox);

           -- Mass of the block in kilograms.
           Core.SetMass(block, 15);
           Core.SetRotation(block, rotation);
           Core.SetPosition(block, blockPosition);

           -- Applies instantaneous force for only one update tick. 
           Core.ApplyImpulse(
               block, Vector.new(cameraForward * 15000));

           -- Applies instantaneous angular force for one update
           -- tick.  In this case blocks will always spin forwards
           -- regardless where the camera is looking. 
           Core.ApplyAngularImpulse(
               block, Sandbox.GetCameraLeft(sandbox) * 10);
       end
   end

现在运行沙箱,我们就可以四处移动、转动相机和发射方块了,如图2-3所示。


2_3

相关文章
|
7天前
|
人工智能 图形学
Unity——游戏AI实例
Unity——游戏AI实例
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
游戏AI综述
游戏AI综述
|
3月前
|
人工智能 搜索推荐 安全
用AI制作游戏应用高点击率图标!
用AI制作游戏应用高点击率图标!
|
3月前
|
人工智能 Python
【Python】利用tkinter开发AI对战井字棋游戏
【Python】利用tkinter开发AI对战井字棋游戏
85 0
|
4月前
|
人工智能 达摩院 安全
巨人网络与阿里云签署合作备忘录,建立 “游戏 + AI”全面合作
阿里云达摩院也将为双方合作提供深度技术支持。目前国内最大、由阿里云达摩院主导维护的 AI 模型开源社区魔搭社区 ModelScope ,将结合巨人网络业务需求场景,进行 AI + 创作工具、游戏 + AI 玩法的场景挖掘,持续迭代升级模型能力,提升产品性能。
|
5月前
|
机器学习/深度学习 人工智能 算法
ChatGPT唤醒AI游戏?
ChatGPT唤醒AI游戏?
100 0
|
6月前
|
人工智能 安全 开发者
Level Up!真格 AI 游戏黑客松等你来战
Level Up!真格 AI 游戏黑客松等你来战
276 0
|
6月前
|
机器学习/深度学习 人工智能 编解码
神经渲染与AI生成框架结合,5倍提升游戏速度,英伟达是这样做的
神经渲染与AI生成框架结合,5倍提升游戏速度,英伟达是这样做的
|
6月前
|
机器学习/深度学习 人工智能 数据挖掘
找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了,腾讯游戏知几AI团队和西工大ASLP组联合出品
找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了,腾讯游戏知几AI团队和西工大ASLP组联合出品
258 0
|
6月前
|
机器学习/深度学习 存储 人工智能
超大模型出现后,AI的游戏结束了?Gary Marcus:路走窄了
超大模型出现后,AI的游戏结束了?Gary Marcus:路走窄了
相关产品
机器翻译
推荐文章
更多