动画中的“马戏”是什么?

​ 想必各位阿宅们一定在国内某弹幕网站上看过动画吧,大家应该或多或少看见过类似这样的弹幕:“居然马戏有可以看,爽到!”,屏幕前观看动画的你可能不经意间瞥见了这条弹幕,并且一头雾水:“马戏?什么意思?是指马戏团吗?可是这和动画内容好像没啥关系吧”。这样的弹幕常见于一些日本机器人动画。

​ 那么问题来了,动画中的“马戏”到底指的是什么?“马戏”,又被称作“板野马戏”,它指的是一种动画的表现技法,由日本动画原画师板野一郎所发明的一种动作场面的设计方式。通常意义上指的是,大量高速运动的物体追逐一个物体的激烈场面,而且多出现于诸如《高达》、《超时空要塞》、《新世纪福音战士》等机器人动画,受到广大“萝卜厨”们的追捧。

​ “板野马戏”,最具代表性的当然是板野一郎笔下的“马戏”,也是狭义上的“马戏”,除去板野一郎本人由其他动画原画师所设计“马戏”应当是广义上的“马戏”。在这之中,有三人的“马戏”受到了板野一郎本人的认可——金子秀一、后藤雅巳和村木靖,相比三人以外的原画师所创作的“马戏”,作为普通观众也可以很明显地感受得到,他们的“马戏”在空间上的表现要好上不少。

【UP主推荐】-你喜欢RPG吗?

​ RPG(role-playing game)自诞生以来都是为广大玩家们所津津乐道的游戏品类,它有着曲折动人的故事、庞大恢弘或清新浪漫的世界观、复杂而富有深度的游戏系统,满足了玩家们的不同口味,给每一位接触过它的少男少女都留下了不可忘却的回忆,我也是其中一员。

​ 我最早接触的RPG是小学时期玩过的国产游戏《仙剑奇侠传3》,回忆起来,那的确是一段非常美好又非常痛苦的时光。一方面,由于当时翻拍的电视剧火遍大江南北的影响,《仙剑3》之于看完电视剧的我就像是如今的漫改游戏之于动画粉丝,有着无穷无尽的吸引力,哪怕它可能不是那么的好玩。小学生的假期时光总是无忧无虑的,我暑假的每个清晨与夜晚都在《御剑江湖》的旋律中度过。当然,游玩的过程中免不了失误,但不过是一句“胜败乃兵家常事,大侠请重新来过”。最要命的还是《仙剑3》曲折的迷宫与复杂的机关,尤其是对于一个10岁左右的小屁孩,所以“草海”与“锁妖塔”,大概是我这辈子都挥不去的噩梦。

​ 后来初中的时候,机缘巧合之下我从马云家购入了PSP,JS给我机子里装上了falcom的《零之轨迹》,我便因此入了JRPG的大坑,玩过但不限于FF、DQ、Persona、ys、xeno等等系列,其中的故事还有很多,但让我们回到正题——你喜欢RPG吗?

​ 很显然,我并不是需要得到回答而发问,而是为了让喜欢RPG的你浏览我的文章的内容,毕竟能坚持看我叨叨到这里的人,这个问题的答案不言而喻。或许我们的出生与经历完全不相同,但我相信我们拥有的共同话题,可以供我们聊够一个惬意的下午,但是请允许我介绍另一个同样深爱着RPG这个游戏品类的人。

​ 他不是一个简简单单的人,他是经常出没于s1的知名坛友,也是B站游戏区的一位up主,他的赛博名字叫做lunamos,他最出名的视频作品便是视频系列《游戏通鉴》,一个带你回味老游戏的视频系列。从游戏发行制作的种种,再到游戏的系统与剧情,lunamos都能有条不紊地娓娓道来,如果你玩过的RPG足够多,那么你一定会喜欢上《游戏通鉴》那独特的气质与魅力。如果你通过这篇短文,去完整地观看了lunamos的视频,那么我觉得我们一定会在某期《游戏通鉴》的评论区相见的。

JavaScript中的var、let和const的异同

​ var、let和const在JavaScript中都是声明变量的关键字,其中let和const是ES6中新增的关键字。虽然这三个关键字都是用来声明变量的,但是它们之间存在一些异同点。

var a = 0;
let b = 0;
const c = 0;

a // 0
b // 0
c // 0

​ 先来看一下它们的相同点。首先是这三者的相同之处,很显然是它们都可以用来声明变量(废话),接下来是三者中两两相同之处,从中也可以看它们之间的不同点。

1.var和let声明的变量都可以重新赋值
var a = 0;
let b = 0;
const b = 0;

// 重新赋值
a = 1;
b = 1;
c = 1;

a // 1
b // 1
c // TypeError: Assignment to constant variable.

​ 可以看出,var和let声明的变量可以修改其中的值,而const声明的变量不可以重新赋值。实际上,const是用来声明常量的,在实际的编程任务中,由于对节省内存空间、进行参数的修改和调整等状况的考虑,我们声明的很多变量是不需要重新赋值的,ES6中const关键字的加入,解决了这些问题。而且const所声明的变量,在其声明的时候必须初始化,不能留到后面的语句里在对其赋值。

const a;
// SyntaxError: Missing initializer in const declaration
2.let和const都具有块级作用域

​ 在ES6之前,JavaScript只存在全局作用域和函数作用域,ES6新增了块级作用域。所谓作用域,指的就是变量和函数可访问的范围,它控制着变量和函数的访问。ES5中,我们在在全局作用域中定义的变量和函数,不论是在函数体外还是函数体内都是可以被访问的,在函数作用域中定义的变量和函数,只能在它被定义的函数的函数体内才能可以被访问。由于ES6以前只有这两种作用域,所以会导致诸如,我们不想让外部访问的变量泄露成了全局变量的问题。例如下面的代码:

var arr = [1,2,3]
for(var i = 0; i< arr.length; i++){
    console.log(arr[i]);
    // 1
    // 2
    // 3
}
console.log(i); // 3

​ 这很显然不是我们所希望看到的,而使用let和const则不会出现这种情况,let和const存在块级作用域,由{ }所包括。

var arr = [1,2,3]
for(let i = 0; i< arr.length; i++){
    console.log(arr[i]);
    // 1
    // 2
    // 3
}
console.log(i); // ReferenceError: i is not defined
3.let和const都存在暂时性死区

​ 暂时性死区在此处指的是这么一种语法现象,就是在块级作用域内使用let或const声明变量之前,使用该变量会报错。因此只能在声明之后使用该变量。

if(true){
    a = 0; // ReferenceError: Cannot access 'a' before initialization
    console.log(a); // ReferenceError: Cannot access 'a' before initialization
    let a;
    console.log(a); //undefined
}
4.let和const都不存在变量提升

​ 使用var声明变量会存在“变量提升”的现象,即变量可以在声明之前使用,而let和const则不可以。

console.log(a); // undefined
var a;

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b;
5.let和const不会被添加到全局对象上

​ 如果我们使用var声明一个全局变量,它便会被添加到全局对象上,在浏览器环境里会被添加到window对象上,而在Node环境里会被添加到global对象上,而let和const所声明的全局变量不会如此。

var a = 1;
let b = 2;
const c = 3;
console.log(window.a,window.b,window.c); // 1 undefined undefined
6.let和const不能重复声明变量

​ var可以重复声明变量,而let和const不行。

var a = 1; 
var a = 3;
console.log(a); // 3

let b = 1;
let b = 3;
console.log(b); // SyntaxError: Identifier 'b' has already been declared
var a = 3;
console.log(a);

const c = 1
const c = 3;
console.log(c); // SyntaxError: Identifier 'c' has already been declared
7.根据上述的比较可以总结出如下的表格:

欢迎来到 Eureka's Blog!

​ ​  ​  欢迎来到我的个人博客,在这里,我将会通过文章来分享各式各样有趣的事情。我会研究我所喜爱的领域,并把个人的见闻与理解记录成文章,不管是游戏、动画、漫画、还是编程。只要是值得记录的事物, 我都会尽量在这里写成文章,也希望各位有缘来到这里的朋友对我的文章提出意见和建议。