Threebody1 发表于 2023-4-10 22:04:07

scracth跑酷游戏的爬墙特效怎么制作?

我将墙壁分为了 Walleft 和 wallright
目的是为了让程序对两种不同的现象做出更智能的反应
如果不需要划分,请在回复里著名
另:
我没有办法用简洁的blocks判断是不是靠近墙壁!scarch的自定义积木块不支持返回值

isdkz 发表于 2023-4-10 22:07:24

在Scratch中制作跑酷游戏的爬墙特效,可以通过以下步骤实现。为简化问题,我们暂时不区分Walleft和wallright,你可以稍后根据需要进行调整。

1、首先,在角色(跑酷游戏中的玩家角色)中创建两个新变量:isTouchingWall 和 wallSide。isTouchingWall 用于判断角色是否接触到墙壁,wallSide 用于判断接触的墙壁是左边还是右边。

2、在角色的脚本中添加以下代码:

当绿旗被点击
重复执行直到 <角色碰到(游戏结束)>
如果 <碰到(Walleft)> 那么
    设定 isTouchingWall 为 1
    设定 wallSide 为 "left"
否则 如果 <碰到(wallright)> 那么
    设定 isTouchingWall 为 1
    设定 wallSide 为 "right"
否则
    设定 isTouchingWall 为 0
结束

3、根据isTouchingWall 和 wallSide 的值,控制角色的运动。例如,当碰到左边的墙时,角色向右爬;碰到右边的墙时,角色向左爬。
当绿旗被点击
重复执行直到 <角色碰到(游戏结束)>
如果 <isTouchingWall = 1> 那么
    如果 <wallSide = "left"> 那么
      角色向右爬
    否则 如果 <wallSide = "right"> 那么
      角色向左爬
    结束
否则
    角色正常移动
结束

在这个示例中,我们没有使用自定义积木块来判断是否靠近墙壁,而是通过变量isTouchingWall 和 wallSide 进行判断。你可以根据自己的需求调整代码以适应你的游戏设计。

Threebody1 发表于 2023-4-10 22:12:19

isdkz 发表于 2023-4-10 22:07
在Scratch中制作跑酷游戏的爬墙特效,可以通过以下步骤实现。为简化问题,我们暂时不区分Walleft和wallrigh ...

可是我的积木块中设置了:如果碰到了wallelt就像左移动。所以应该使用积木块判断x和y距离是否分别小于10

isdkz 发表于 2023-4-10 22:15:09

Threebody1 发表于 2023-4-10 22:12
可是我的积木块中设置了:如果碰到了wallelt就像左移动。所以应该使用积木块判断x和y距离是否分别小于10

了解您的需求了,我们可以通过计算角色与墙壁之间的 X 和 Y 距离来实现这个功能。首先,在角色中创建两个新变量:distanceX 和 distanceY。

然后在角色的脚本中添加以下代码,用于计算角色与 Walleft 和 wallright 之间的 X 和 Y 距离:

当绿旗被点击
重复执行直到 <角色碰到(游戏结束)>
设定 distanceX 为 (abs (x 位置 - (Walleft 的 x 位置)))
设定 distanceY 为 (abs (y 位置 - (Walleft 的 y 位置)))
如果 <(distanceX < 10) 和 (distanceY < 10)> 那么
    角色向左移动
结束

设定 distanceX 为 (abs (x 位置 - (wallright 的 x 位置)))
设定 distanceY 为 (abs (y 位置 - (wallright 的 y 位置)))
如果 <(distanceX < 10) 和 (distanceY < 10)> 那么
    角色向右移动
结束

角色正常移动
结束

这段代码会计算角色与 Walleft 和 wallright 之间的 X 和 Y 距离,并根据距离来判断角色是否需要向左或向右移动。如果 X 和 Y 距离都小于 10,那么角色将根据墙壁的位置进行移动。

您可以根据需要调整距离值(例如,将 10 更改为其他值),以便更好地适应您的游戏设计。

Threebody1 发表于 2023-4-10 22:21:05

isdkz 发表于 2023-4-10 22:15
了解您的需求了,我们可以通过计算角色与墙壁之间的 X 和 Y 距离来实现这个功能。首先,在角色中创建两个 ...

确实这是一种思路

我有一个疑问,大量的复制恐怕不好,可不可以写一个积木块,修改一个 result 变量?像这样:
// 原谅我的英语
define is_close(x1, y1, x2, y2)
//scratch写成python了
if ( abs ( x1 - x2 ) < 10 ) and ( abs ( y1 - y2 ) < 10)
    result = 1
else
    result = 0

另:怎么获取wallleft、wallright的x、y坐标?


我发现你的机器人助手似乎没有发现我的问题里的 walleft 少了一个 L

isdkz 发表于 2023-4-10 22:25:54

Threebody1 发表于 2023-4-10 22:21
确实这是一种思路

我有一个疑问,大量的复制恐怕不好,可不可以写一个积木块,修改一个 result 变量? ...

抱歉我之前没有注意到拼写错误,现在我明白您的问题了。在 Scratch 中,您可以使用自定义积木块来实现您所描述的功能。

首先,创建一个名为 is_close 的自定义积木块,然后添加四个输入参数:x1、y1、x2 和 y2。将该积木块设置为运行而不输出,因为我们将使用一个全局变量 result 来存储结果。

接下来,在您的自定义积木块中添加以下代码:

定义 is_close (x1) (y1) (x2) (y2)
如果 <((abs (x1 - x2)) < 10) 和 ((abs (y1 - y2)) < 10)> 那么
    设定 result 为 1
否则
    设定 result 为 0
结束

在主脚本中,您可以使用以下代码来获取 Walleft 和 Wallright 的 x 和 y 坐标,并调用 is_close 自定义积木块:

当绿旗被点击
重复执行直到 <角色碰到(游戏结束)>
is_close (角色的x位置) (角色的y位置) (Walleft 的 x 位置) (Walleft 的 y 位置)
如果 <result = 1> 那么
    角色向左移动
结束

is_close (角色的x位置) (角色的y位置) (Wallright 的 x 位置) (Wallright 的 y 位置)
如果 <result = 1> 那么
    角色向右移动
结束

角色正常移动
结束

要获取 Walleft 和 Wallright 的 x 和 y 坐标,只需在积木块中使用类似于 (Walleft 的 x 位置) 和 (Walleft 的 y 位置) 的表达式即可。

再次为之前的拼写错误表示歉意,希望这次的解答能帮助到您。

Threebody1 发表于 2023-4-10 22:32:52

isdkz 发表于 2023-4-10 22:25
抱歉我之前没有注意到拼写错误,现在我明白您的问题了。在 Scratch 中,您可以使用自定义积木块来实现您 ...

我是说,哪个积木块可以获取到wallleft、wallright的x、y坐标?注意代码是写在可以移动的角色的脚本上的

https://t1.wodetu.cn/2023/04/10/2881a9073b703aafad6b45d648bd74fc.png
这chatgpt还得再训练一下哈

isdkz 发表于 2023-4-10 22:34:58

Threebody1 发表于 2023-4-10 22:32
我是说,哪个积木块可以获取到wallleft、wallright的x、y坐标?注意代码是写在可以移动的角色的脚本上 ...

{:5_97:}

Threebody1 发表于 2023-4-10 22:35:42

isdkz 发表于 2023-4-10 22:34


不过呢,问题还是得回答的{:10_256:}
我是说,哪个积木块可以获取到wallleft、wallright的x、y坐标?注意代码是写在可以移动的角色的脚本上的

isdkz 发表于 2023-4-10 22:37:30

Threebody1 发表于 2023-4-10 22:35
不过呢,问题还是得回答的

抱歉我之前的回答没有完全解决您的问题。在 Scratch 中,您不能直接在一个角色的脚本中获取另一个角色的 x 和 y 坐标。但是,您可以使用全局变量来实现这一目标。

首先,在角色中创建四个新变量:walleftX、walleftY、wallrightX 和 wallrightY。然后,在 Walleft 角色的脚本中添加以下代码:

当绿旗被点击
重复执行直到 <游戏结束>
设定 walleftX 为 (x 位置)
设定 walleftY 为 (y 位置)
等待 0.1 秒
结束

接下来,在 Wallright 角色的脚本中添加以下代码:

当绿旗被点击
重复执行直到 <游戏结束>
设定 wallrightX 为 (x 位置)
设定 wallrightY 为 (y 位置)
等待 0.1 秒
结束

现在,您可以在主角色的脚本中使用这些全局变量来调用 is_close 自定义积木块:

当绿旗被点击
重复执行直到 <角色碰到(游戏结束)>
is_close (角色的x位置) (角色的y位置) (walleftX) (walleftY)
如果 <result = 1> 那么
    角色向左移动
结束

is_close (角色的x位置) (角色的y位置) (wallrightX) (wallrightY)
如果 <result = 1> 那么
    角色向右移动
结束

角色正常移动
结束

这样一来,您就可以在主角色的脚本中获取 Walleft 和 Wallright 的 x 和 y 坐标,并使用这些坐标来判断角色是否接近这两个墙壁。

Threebody1 发表于 2023-4-10 22:39:41

isdkz 发表于 2023-4-10 22:37
抱歉我之前的回答没有完全解决您的问题。在 Scratch 中,您不能直接在一个角色的脚本中获取另一个角色的...

所以我最佳答案是给哪个回答呢{:10_277:}

isdkz 发表于 2023-4-10 22:43:45

Threebody1 发表于 2023-4-10 22:39
所以我最佳答案是给哪个回答呢

看着给呗{:5_97:}
页: [1]
查看完整版本: scracth跑酷游戏的爬墙特效怎么制作?