深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)

2023-11-17

scratch中的“移动10步”是scratch运动类积木中的第一个积木,也是大多数初学者使用scratch的时候用到的第一个积木命令。

当我们运行“移动10步”积木时,小猫会向右移动10步(目测其实也就一点点距离)。那么“移动10步”究竟在scratch中,他是如何去执行的呢,今天我们来探究一下这个问题。

这篇文章可以让初学者更好的去理解scratch“移动10步”的本质。


一."移动10步"的距离并不是你想象的10步那么远

最开始我们运行移动10步积木块的时候,或多或少会有一些疑惑,这移动10步怎么就移动了这么点的距离呢?其实scratch中移动10步并不是移动10步的距离,而是移动了10个像素单位。

scratch的舞台大小是480(长)*360(宽)的像素单位,移动10步的本质其实就是移动了舞台宽度的四十八分之一(把舞台长度平均分成48份,其中一份的距离就是移动10步的距离)的长度。


二."移动10步"与"方向"的关系

1.角色的属性:方向

scratch中的角色都有面向某一方向的属性,这个和我们站着的时候也是面向了东南西北或者某一个方向的意思一样。

当我们点击角色区的方向输入框,弹出的圆盘上有一个箭头,我们可以通过鼠标点击旋转这个箭头,scratch的角色也会跟着旋转,同时方向的数值发生相应的变化。

 

scratch角色的方向拥有属性值和它的取值范围。方向的取值范围其实也就是它旋转一圈的大小,我们知道旋转一圈也就是360度,那么scratch角色的方向是不是就是用0-360度来表示的呢?

 

  • "方向"的取值范围:-180度<方向取值范围<=180度

运动类积木中最后的一个积木块是圆形的,叫"方向",scratch中所有圆形的积木代表它存储了一个数据,那么这个叫"方向"的积木存储的就是角色的方向值,它的值和角色区的方向输入框内的数字是一样的,他们的值都是表示现在角色所面向的方向。

如果一个角色面向90度方向,然后它又向右转了180度,那么它现在面向的是哪一个方向值呢?

  • 方向与旋转度数的换算:

方向是一个角色的属性,代表角色与0度所偏转的角度,它的值有取值范围-180度<方向取值范围<=180度。

旋转度数是一个动作,一个角色它可以旋转任意的度数,但是旋转完了它必定面向的是一个确定的方向。

那么,旋转度数与角色实际面向的方向该如何去换算呢?

想象一下:你向左转180度和向右转180度之后面向的方向是一样的,所以scratch会自动把负180度转换成180度。

同理,如果一开始面向0度,那么你向右转270度(90度+180度)和向左转90度是一样的,所以如果一个角色面向90度方向,如果它又向右转了180度,那么它现在面向的就是负90度。

所以本质上,scratch中的方向表示的是角色偏离0度方向的值,所以不管你怎么去旋转(哪怕旋转10000度),你所偏离0度方向值的范围始终是在-180度<方向取值范围<=180度之间(方向的绝对值小于等于180)。

所以,一个面向0度的角色,角色旋转了多少度之后它面向的方向值可以用下图的程序去计算:

 

2."移动10步"与"方向"的关系

因为scratch中角色默认的面向方向都是90度,所以我们运行移动10步的时候,角色才会向右移动。

如果我们要让角色向上移动10步,有两种方法:

1.通过运行代码改变角色面向的方向:

找到“面向90方向”积木块,把数字改成“0”(即表示角色面向的方向是向上),单击鼠标运行积木块即可。

2.直接在角色区更改角色面向的方向:

找到角色区的“方向”输入框,直接把输入框内的数字改成“0”,鼠标离开输入框,在任意位置单击一下,方向就会变成0度(我们会看到箭头指向向上)

当角色面向的方向是0度时,运行移动10步角色就会向上移动10个像素单位。


三."移动10步"角色并不是真的移动了10步

1.舞台的刷新机制与电影播放的原理:

“移动10步”其实在软件运行时角色不是真的向前移动了10个像素单位,而是消失的同时又在所面向的方向10个单位像素的地方显示出来了,我们称之为舞台的刷新机制,这个和我们看电影类似,电影的原理是“视觉暂留”。人眼在某个视像消失后,仍可使该物像在视网膜上滞留0.1-0.4秒左右。电影胶片以每秒24格画面匀速转动,一系列静态画面就会因视觉暂留作用而造成一种连续的视觉印象,产生逼真的动感。

2.舞台刷新的时间:

scratch中“移动10步”的本质其实就是刷新了一下屏幕,角色消失的同时又在所面向的方向10个单位像素的地方显示出来了,这个过程的时间很短,时间大概是0.033秒,测试的方法我之前写过一篇文章-《scratch中的“重复执行”指令执行时消耗的时间的问题》,只不过那时候对于舞台的刷新认识还不足,但是测试刷新时间的方法是有效的。正是由于我们的视觉暂留,我们以为角色向前移动了10个单位。

也就是说,如果我们重复执行“移动10步”指令,看到小猫在屏幕移动的画面,其实就是在看一部每秒30帧速率的动画(电影的帧速率一般是24帧,也就是每秒播放24个图片)

3.本质:

综上所述,scratch中”移动10步“的本质并非角色真的移动了10步,而是舞台刷新了角色所在的位置(新位置是原来的位置所面向的方向10个单位的距离),刷新的过程花了0.033秒。

需要注意的是,如果同时4个“移动10步”叠加在一起运行,那么程序会直接移动40步后刷新屏幕,也就是说4个“移动10步”积木块叠加在一起的效果等同于“移动40步”的积木块。


四:其他

“移动10步”中的数字“10”是可以改变的,重复执行“移动10步”时,数字越大移动速度越快。

“移动10步”中的数字也可以是小数。

“移动10步”中的数字也可以是负数,如果数字是负数,那么角色会向其所面向的方向的相反方向运动。


 

总结:

scratch中的运动类的第一个积木,“移动10步”的本质是:

当运行“移动10步”积木时,屏幕会刷新,角色在0.033秒内,从初始位置重新出现在其所面向方向10个单位距离的位置。


 

参考资料:

浅谈Scratch的舞台刷新机制 Part 2——在常规积木中的应用 原创 小阿斌 Scratch 格物堂 2019-08-01

百度百科-帧率


本文作者姜老师,热爱少儿编程,欢迎加微信交流13831105925

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看) 的相关文章

  • Gitee API的使用|如何批量删除Gitee下的所有仓库

    前言 那么这里博主先安利一些干货满满的专栏了 首先是博主的高质量博客的汇总 这个专栏里面的博客 都是博主最最用心写的一部分 干货满满 希望对大家有帮助 高质量博客汇总https blog csdn net yu cblog category
  • python语音播报

    python3 pip install pyttsx3 python2 pip install pyttsx 文本转语音 import pyttsx3 import time str Come on Catherine engine pyt
  • java 强密码验证策略工具类

    java 强密码验证策略工具类 package com neusoft caeid common utils import java util regex Matcher import java util regex Pattern aut
  • ChatGPT论文考试满绩,高等教育该如何应对人工智能挑战?

    近日 ChatGPT引发热议 一方面 ChatGPT表现亮眼 有大学生利用ChatGPT在开卷课堂上取得满绩的优异成绩 另一方面 部分院校 学术期刊却对ChatGPT在高等教育领域的推进保持谨慎态度 甚至有高校明确禁止这项工具技术的使用 那
  • 算法题:Rod Cutting

    算法题 Rod Cutting 一 题目 二 代码 三 结果 一 题目 二 代码 lengths 1 1 3 4 lengths 5 4 4 2 2 8 def rodOffcut lengths resut resut append le
  • Android自定义控件--如何在XML文件中使用自定义属性

    前言 你好 我是Cici 这几天在做一个小项目的时候 用到了自定义控件 为了方便在XML中进行配置 于是需要用到自定义属性 特此记下用法 方便复习的同时也希望对大家有所帮助 一 为什么需要自定义控件 Android本身提供了很多控件 比如T
  • 1024 视频拼接

    题目描述 你将会获得一系列视频片段 这些片段来自于一项持续时长为 T 秒的体育赛事 这些片段可能有所重叠 也可能长度不一 视频片段 clips i 都用区间进行表示 开始于 clips i 0 并于 clips i 1 结束 我们甚至可以对
  • pyinstaller打包Transformers 报错No such file or directory

    问题描述 Traceback most recent call last File transformers utils import utils py line 1086 in get module File importlib init
  • Go开发者路线图2019,请收下这份指南

    Go是Google开发的一种静态 强类型 编译型 并发型 并具有垃圾回收功能的类C编程语言 2009以开源项目的形式发布 2012年发布1 0稳定版本 距今已经十年了 其性能类似于Java和C 但速度极快 适合搭载于web服务器 用于高性能
  • LeetCode1652. 拆炸弹

    题目描述 1652 拆炸弹 力扣 LeetCode 题目描述看的不是很清楚 直接看用例 这道题是简单题 取模 防止数组访问越界 C语言代码如下 int decrypt int code int codeSize int k int retu
  • 数据分桶

    数据分桶是一种数据预处理技术 用于减少次要观察误差的影响 是一种将多个连续值分组为较少数量的 桶 的方法 例如 例如我们有一组关于人年龄的数据 如下图所示 现在我们希望将他们的年龄分组到更少的间隔中 可以通过设置一些条件来实现 分桶的数据不
  • (Java)leetcode-945 Minimum Increment to Make Array Unique(使数组唯一的最小增量)

    题目描述 给定整数数组 A 每次 move 操作将会选择任意 A i 并将其递增 1 返回使 A 中的每个值都是唯一的最少操作次数 示例 1 输入 1 2 2 输出 1 解释 经过一次 move 操作 数组将变为 1 2 3 示例 2 输入
  • 在ubuntu上搭建文件服务器

    首先需要在ubuntu上下载好文件资源 一共是三个资源 在下载资源之前建议将git和nginx安装好 在本教程中将会用到 ngnix http nginx org download nginx 1 12 2 tar gz 利用winscp上
  • osg学习(五十一)Warning: detected OpenGL error ‘invalid operation‘ at after RenderBin::draw(..)

    原因是什么 这个错误只出现一次 并且是在第一帧时出现 Warning detected OpenGL error invalid operation after applying attribute Viewport 04292398 应该
  • 华为OD笔试题:工作安排 --- 100分 (思路+python代码)

    题目 小明每周上班都会拿到自己的工作清单 工作清单内包含n项工作 每项工作都有对应的耗时时长 单位h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化 输入描述 输入的第一
  • 每天进步一点点——Linux中的线程局部存储(二)

    转载 http blog csdn net cywosp article details 26876231 在Linux中还有一种更为高效的线程局部存储方法 就是使用关键字 thread来定义变量 thread是GCC内置的线程局部存储设施
  • TreeMap 的特点

    TreeMap基于红黑树实现 增删改查的平均和最差时间复杂度均为O 最大特点时Key有序 key必须实现Comparable接口或者提供Comparator比较器 所以key不允许为null HashMap 依靠hashCode和equal
  • web移动端适配方案以及不同单位之间的区别

    web移动端适配方案 第一种 rem实现原理 rem是一个倍数单位 它是基于html的font size的倍数 只要我们在不同的设备上设置一个合适的初始值 当设备发生变化font size就会自动等比适配大小 从而在不同的设备上表现统一 如
  • 注意力模型CBAM

    论文 CBAM Convolutional Block Attention Module Convolutional Block Attention Module CBAM 表示卷积模块的注意力机制模块 是一种结合了空间 spatial 和

随机推荐

  • 【Vue2】之简单自定义插件开发,含demo

    一个vue2 x的简单插件开发实例 首先创建文件夹和文件 个人习惯把插件都放在src plugins文件夹里 创建本次demo插件目录src plugins demo 以及目录文件 demo index js demo src main j
  • python,求解字符串的所有子串

    网上的一种解法 def cut s str results num 0 x 1 表示子字符串长度 for x in range len s i 表示偏移量 for i in range len s x results append s i
  • 部署 - 前后端发布策略

    前端发布策略 前端发布的本质是静态资源的发布 主要关心缓存和资源同步问题 HTTP缓存 合理的使用缓存让未修改的文件复用可以有效的减轻服务器负担和提高前端页面渲染效率 1 协商缓存 2 本地缓存 本地缓存无需跟服务器再次确认 直接根据文件名
  • CORS policy: header is present on the requested

    CORS policy header is present on the requested 欢迎使用Markdown编辑器 解决方法 请求结果 欢迎使用Markdown编辑器 Access to XMLHttpRequest at htt
  • spring boot读取pom.xml变量

    1 application yml配置 version project version 项目版本号 为什么不使用 project version 呢 避免与避免与Spring语法冲突 项目pom继承了spring boot starter
  • DCDC相关

    1 同步和异步 同步 MOSFET管 效率高 价格贵 零件数多 电路复杂 异步 二极管 效率低 价格低 电路简单 同步整流上管S1和下管S2需要一相同频率信号以互补方式进行驱动 保证S1导通时S2截止 S1截止S2导通 异步二极管损耗 在电
  • plsql 修改sql窗口字体

    工具 首选项 用户界面 字体 编辑器 选择
  • Android自定义一个广播接收器BroadcastReceiver监听系统wifi连接

    概述 注册一个广播用来接收系统发送的广播 比如 发送或接收到一个短信 用Toast或Notification通知提醒 或者是打开或者断开网络连接 用Toast做出提示 注册文件
  • uniapp-计算属性、watch 侦听器、props验证

    一 计算属性 计算属性本质上就是一个 function 函数 它可以实时监听 data 中数据的变化 并 return 一个计算后的新值 1 声明与使用计算属性 计算属性需要以 function 函数的形式声明到组件的 computed 选
  • win11不兼容很多游戏?win11不兼容哪些游戏

    很多用户升级win11系统之后 最担心的就是win11兼容性不强 很多游戏都玩不了 那到底win11不兼容哪些游戏 下面小编就来给大家讲讲 win11很多游戏不兼容 1 其实win11系统并没有那么多无法兼容的游戏 基本上win10可以兼容
  • java插入gif_Java swing(纯代码和含部分个人解析)插入png或gif图片的方法,切换界面功能的实现...

    package swing public class mains public static void main String args new swing package swing import java awt Color impor
  • 听说,你想做大模型时代的应用层创业!

    亲爱的科技探险家们和代码魔法师们 未来的钟声已经敲响 预示着一场极度炫酷的虚拟现实游戏即将展开 从初期简单的智能识别 到设计师级别的图纸设计 生成式AI技术 Generative AI 以其独特理念和创新模式重塑了传统内容生产效率和交互模式
  • Unity手机端3档震动

    using System Collections using System Collections Generic using UnityEngine public class VibrateHelper MonoBehaviour sta
  • elementui dialog组件固定高度

    弹窗高度过大 想设置个自适应的高度 固定头尾 deep el dialog margin 5vh auto important deep el dialog body height 70vh overflow auto margin hei
  • ChatGPT救命!4岁男孩3年求医17位专家无果,大模型精准揪出病因

    克雷西 萧箫 发自 凹非寺量子位 公众号 QbitAI 怪病 缠身3年求医无果 最终竟然被ChatGPT成功诊断 这是发生在一名4岁男孩身上的真实经历 某次运动后 他身体开始剧痛 母亲前后带她看了17名医生 从儿科 骨科到各种专家 先后进行
  • DeferredResult的使用场景及用法

    场景 假设我们现在要实现这样一个功能 浏览器要实时展示服务端计算出来的数据 一种可能的实现是 浏览器频繁 例如定时1秒 向服务端发起请求以获得服务端数据 但定时请求并不能 实时 反应服务端的数据变化情况 若定时周期为S 则数据延迟周期最大即
  • 小程序支付完整过程。足够详细!

    1 注册小程序 拿到App id 和 AppSecret 小程序密钥 取得商户的微信支付商户号 MCHID 和 微信支付密钥 APIKEY 2 流程 微信用户在微信端选商品下单 后台响应下单生成单号 产生第一次签名数据 提交微信统一支付接口
  • IDA工具介绍

    往期推荐 IDA工具安装 分享 ARM处理器寻址方式 ARM指令集 ARM汇编语言程序结构 昨天给大家概括性的了解了IDA工具 今天分享IDA工具的实际应用 一 IDA打开so文件 1 首先打开IDA工具 进入选项界面 直接选中Go选项 如
  • 初识 libcurl multi:实现一个 http 请求处理客户端,一个线程玩命发一个线程吐血收

    一 引言 最近在工作中 遇到了这么一个需求 我们希望拥有一个高性能的 http 请求处理客户端程序 这个客户端要求有这样的架构 它拥有两个线程 一个线程接收业务程序通过消息队列发来的批量的 http 请求信息 进行批量的 http 请求 另
  • 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)

    scratch中的 移动10步 是scratch运动类积木中的第一个积木 也是大多数初学者使用scratch的时候用到的第一个积木命令 当我们运行 移动10步 积木时 小猫会向右移动10步 目测其实也就一点点距离 那么 移动10步 究竟在s