鱼C论坛

 找回密码
 立即注册
查看: 2647|回复: 11

[已解决]scracth跑酷游戏的爬墙特效怎么制作?

[复制链接]
发表于 2023-4-10 22:04:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我将墙壁分为了 Walleft 和 wallright
目的是为了让程序对两种不同的现象做出更智能的反应
如果不需要划分,请在回复里著名
另:
我没有办法用简洁的blocks判断是不是靠近墙壁!scarch的自定义积木块不支持返回值
最佳答案
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 坐标,并使用这些坐标来判断角色是否接近这两个墙壁。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 进行判断。你可以根据自己的需求调整代码以适应你的游戏设计。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可是我的积木块中设置了:如果碰到了wallelt就像左移动。所以应该使用积木块判断x和y距离是否分别小于10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 更改为其他值),以便更好地适应您的游戏设计。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 位置) 的表达式即可。

再次为之前的拼写错误表示歉意,希望这次的解答能帮助到您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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


                               
登录/注册后可看大图

这chatgpt还得再训练一下哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-10 22:35:42 | 显示全部楼层

不过呢,问题还是得回答的
我是说,哪个积木块可以获取到wallleft、wallright的x、y坐标?注意代码是写在可以移动的角色的脚本上的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 坐标,并使用这些坐标来判断角色是否接近这两个墙壁。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以我最佳答案是给哪个回答呢

评分

参与人数 1贡献 +2 收起 理由
sfqxx + 2 升级

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-10 22:43:45 | 显示全部楼层
Threebody1 发表于 2023-4-10 22:39
所以我最佳答案是给哪个回答呢

看着给呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 21:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表