我正在使用Lua在C++中使用游戏引擎来定义NPC.
我可以像这样定义一个原型NPC:
orc =
{
name = "Generic Orc",
health = 100
}
function orc:onIdle()
print("Orc idles...")
end
Run Code Online (Sandbox Code Playgroud)
然后使用生成"Orc"的实例entitySpawn(orc).这是一个C++函数,它从给定的表中读取健康和名称等值,使用给定的值在C++中创建一个Entity对象,另外为特定的NPC创建一个Lua表.
现在,我想orc.health在Lua中的mHealth变量和C++中相应的Entity对象的成员变量之间建立直接连接,因此我可以在Lua中分配一个值并立即在C++中使用它,反之亦然.
这甚至可能吗?或者我是否必须使用setter/getter函数?我已经看了一下light userdata并且已经到了在Lua中存储指向C++变量的指针,但无法分配值.
使用DirectX 11,我创建了一个可以绑定为渲染目标的3D体积纹理:
D3D11_TEXTURE3D_DESC texDesc3d;
// ...
texDesc3d.Usage = D3D11_USAGE_DEFAULT;
texDesc3d.BindFlags = D3D11_BIND_RENDER_TARGET;
// Create volume texture and views
m_dxDevice->CreateTexture3D(&texDesc3d, nullptr, &m_tex3d);
m_dxDevice->CreateRenderTargetView(m_tex3d, nullptr, &m_tex3dRTView);
Run Code Online (Sandbox Code Playgroud)
我现在想要更新整个渲染目标并用像素着色器中生成的程序数据填充它,类似于使用"全屏通道"更新2D渲染目标.生成数据所需的一切都是所讨论像素的UVW坐标.
对于2D,可以构建渲染全屏三角形的简单顶点着色器:
struct VS_OUTPUT
{
float4 position : SV_Position;
float2 uv: TexCoord;
};
// input: three empty vertices
VS_OUTPUT main( uint vertexID : SV_VertexID )
{
VS_OUTPUT result;
result.uv = float2((vertexID << 1) & 2, vertexID & 2);
result.position = float4(result.uv * float2(2.0f, -2.0f) + float2(-1.0f, 1.0f), 0.0f, 1.0f);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我很难绕过如何采用3D原理.这是即使在DirectX 11的可能,还是我的描述来呈现给卷纹理的个体片在这里?
我正在使用Lua进行NPC行为的C++游戏引擎.我在设计过程中遇到了一些问题.
对于需要多个帧执行的所有内容,我想使用一个链接的进程列表(这是C++类).所以这:
goto(point_a)
say("Oh dear, this lawn looks really scruffy!")
mowLawn()
Run Code Online (Sandbox Code Playgroud)
将创建一个GotoProcess对象,该对象将具有指向SayProcess对象的指针,该对象将具有指向MowLawnProcess对象的指针.这些对象将在NPC生成时立即创建,无需进一步编写脚本.这些对象中的第一个将在每帧更新.完成后,它将被删除,下一个将用于更新.我通过ParallelProcess扩展了这个模型,ParallelProcess包含多个同时更新的进程.
我发现了一些严重的问题.看看这个例子:我想要一个角色走到point_a再然后去狂暴,然后攻击任何接近的人.该脚本看起来像这样:
goto(point_a)
while true do
character = getNearestCharacterId()
attack(character)
end
Run Code Online (Sandbox Code Playgroud)
根据我的设计,这根本不起作用.首先,当角色甚至没有开始走到point_a时,角色变量将被设置在开头.然后,由于while循环,脚本将继续永久添加AttackProcesses.
我可以为循环实现一个WhileProcess并逐行评估脚本.我怀疑这会增加代码的可读性.
有没有其他常见的方法我没有想到解决这个问题?
下面的程序给出错误'无效使用不完整类型类Rectangle'和'类型矩形的前向声明'.如何解决这个问题而不编辑任何头文件?是否有任何可能的方法只使用构造函数进行转换?
include<iostream>
include<math.h>
using namespace std;
class Rectangle;
class Polar
{
int radius, angle;
public:
Polar()
{
radius = 0;
angle = 0;
}
Polar(Rectangle r)
{
radius = sqrt((r.x*r.x) + (r.y*r.y));
angle = atan(r.y/r.x);
}
void getData()
{
cout<<"ENTER RADIUS: ";
cin>>radius;
cout<<"ENTER ANGLE (in Radians): ";
cin>>angle;
angle = angle * (180/3.1415926);
}
void showData()
{
cout<<"CONVERTED DATA:"<<endl;
cout<<"\tRADIUS: "<<radius<<"\n\tANGLE: "<<angle;
}
friend Rectangle :: Rectangle(Polar P);
};
class Rectangle
{
int x, y;
public:
Rectangle()
{
x …Run Code Online (Sandbox Code Playgroud) c++ ×3
lua ×2
3d-texture ×1
directx-11 ×1
hlsl ×1
mapping ×1
pointers ×1
rendertarget ×1
variables ×1