【发布时间】:2020-11-06 09:51:26
【问题描述】:
我正在尝试制作一个简单的角色扮演游戏,只是为了好玩。
我目前正在研究一个随机遭遇系统,我在 Reddit 上发现了这段代码,它可能很有用;
///This code should be under your object's create event:
encounterSteps = irandom_range(10,20);
///This code should run when you take a step:
if (steps > encounterSteps) {
steps = 0;
encounterSteps = irandom_range(10,20);
room_goto(rm_battle);
}
但是有一个问题,这个系统使用了一个名为“steps”的变量,而我目前没有那个变量。现在我显然知道我需要计算我的步数才能使它起作用,但我不完全确定我将如何计算我的步数。我目前正在使用以下代码进行移动:
var moveSpeed = 4;
if (_kLeft && !place_meeting(x - moveSpeed, y, oWall))
{
x -= moveSpeed;
sprite_index = sPlayerLeft;
image_speed = 0.5;
}
if (_kRight && !place_meeting(x + moveSpeed, y, oWall))
{
x += moveSpeed;
sprite_index = sPlayerRight;
image_speed = 0.5;
}
if (_kUp && !place_meeting(x, y - moveSpeed, oWall))
{
y -= moveSpeed;
sprite_index = sPlayerUp;
image_speed = 0.5;
}
if (_kDown && !place_meeting(x, y + moveSpeed, oWall))
{
y += moveSpeed;
sprite_index = sPlayerDown;
image_speed = 0.5;
}
我假设我必须将此代码更改为更像是一次一步的系统。
现在我的问题是:如何使用我当前的移动系统制作一个跟踪步数或生成随机遭遇的系统?
【问题讨论】:
-
另一个选项:每次角色移动,你将一个变量“encounterRisk”加1,得到一个介于0和另一个变量“encounterRate”之间的随机数,如果结果低于“encounterRisk” ,重置“遭遇风险”并开始战斗。由您为“encounterRate”定义一个合适的值。您还可以在开始移动时每隔 100 毫秒或其他时间启动一个带有回调函数的 Timer 以检查这一点,并在停止移动时停止它,这样您就不会每帧生成一个随机数。
标签: c# c++ game-development game-maker-studio-2