口袋方舟·“数据结构课作业笔记”#003-数组-简单排列的变量和它们必然命运(中)
所用编辑器版本0.25.0.4
目录总览:
零.前情提要
壹.第一个靠谱数组
贰.所需语法 (代码如本节图示)
叁.应用说明
肆.相关参考链接 (返回主站)
目录总览:
零.前情提要
在变量突然增多、需要更好管理数据、快速查找变量这个需求的背景下,接触了数组,并尝试用数组数组存储金币、经验值这样的数据。
壹.第一个靠谱数组
上一个数组实现了存储数值,数字的跳动距离游戏体验感还是有点距离,这次在数据中存入位置坐标,观察数组在位置改变中的效果,穷举数组与位置结合之后的各种用法。
新建脚本,复制粘贴,跑就完事。
《---myCode-TypeScript---》
interface have {
i: number;
check: Vector;
}
@Core.Class
export default class stack extends Core.Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
var a: have[] = [
{ i: 0, check: new Vector(500, 0, 100) },
{ i: 1, check: new Vector(1000, 0, 100) },
{ i: 2, check: new Vector(1500, 0, 100) },
{ i: 3, check: new Vector(2000, 0, 100) },
{ i: 4, check: new Vector(2500, 0, 100) },
{ i: 5, check: new Vector(3000, 0, 200) }
];
var i = 5;
var chara: Gameplay.Character;
setTimeout(() => {
chara = Gameplay.getCurrentPlayer().character;
chara.worldLocation = a[i].check;
var timer = setInterval(() => {
if (i < 0) {
clearInterval(timer);
}
chara.worldLocation = a[i].check;
i--;
}, 500);
}, 2000);
}
}
《---myCode---》
多跑几次,可以感觉出来角色先被传送到出生点前面,然后每隔一会儿就自动传送到身后的一段距离。
用精确数字来描述,就是角色先被传送到x=3000,y=0,z=100的位置上,然后每隔500毫秒自动倒退500,倒退了5次。
简单拆解,这个数组每一项都是have类型,每一项都含有一个类型是Vector的成员。成员带着x,y,z三维坐标。
对应代码
1.规定一种类型
《---myCode-TypeScript---》
interface have {
i: number;
check: Vector;
}
《---myCode---》
2.产生并填充这种类型的数组
《---myCode-TypeScript---》
var a: have[] = [
{ i: 0, check: new Vector(500, 0, 100) },
{ i: 1, check: new Vector(1000, 0, 100) },
{ i: 2, check: new Vector(1500, 0, 100) },
{ i: 3, check: new Vector(2000, 0, 100) },
{ i: 4, check: new Vector(2500, 0, 100) },
{ i: 5, check: new Vector(3000, 0, 200) }
];
《---myCode---》
这样就有了按计划预定的一系列位置。
然后需要把预先存储的位置填充进玩家角色的位置读取器里,玩家自动读取位置并进行传送
关键代码
《---myCode-TypeScript---》
chara = Gameplay.getCurrentPlayer().character;
chara.worldLocation = a[i].check;
《---myCode---》
但是不声明变量会报错。
所以才有了这样的代码
《---myCode-TypeScript---》
interface have {
i: number;
check: Vector;
}
// 说明一个数据类型,如代码所示,这个叫“have"的类型
// 有一个叫“i“的变量,它的类型是numebr
// 还有一个叫“check"的变量,它的类型是Vector
@Core.Class
export default class stack extends Core.Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
var a: have[] = [
{ i: 0, check: new Vector(500, 0, 100) },
{ i: 1, check: new Vector(1000, 0, 100) },
{ i: 2, check: new Vector(1500, 0, 100) },
{ i: 3, check: new Vector(2000, 0, 100) },
{ i: 4, check: new Vector(2500, 0, 100) },
{ i: 5, check: new Vector(3000, 0, 200) }
];
var i = 5;
var chara: Gameplay.Character;
// 声明一个变量,这个变量是用于暂存获取到的玩家角色
setTimeout(() => {
chara = Gameplay.getCurrentPlayer().character;
// 这个变量现在才存储了一个玩家角色
chara.worldLocation = a[i].check;
// 玩家的位置读取器输入了a.check成员存储的位置信息
var timer = setInterval(() => {
if (i < 0) {
clearInterval(timer);
}
chara.worldLocation = a[i].check;
i--;
}, 500);
}, 2000);
}
}
《---myCode---》
贰.所需语法 (代码如本节图示)
延迟函数——定时炸弹的绝好搭档
计时器——靠谱的时间工具人
延迟函数settimeout(),作用是2000毫秒再去执行内部包含的函数,2000可以改成其他数字,多试试,体会效果。
《---myCode-TypeScript---》
setTimeout(() => {
// chara = Gameplay.getCurrentPlayer().character;
// // 这个变量现在才存储了一个玩家角色
// chara.worldLocation = a.check;
// // 玩家的位置读取器输入了a.check成员存储的位置信息
// var timer = setInterval(() => {
// if (i < 0) {
// clearInterval(timer);
// }
// chara.worldLocation = a.check;
// i--;
// }, 500);
}, 2000);
《---myCode---》
计时器——每秒计时的函数setInterval(),每500毫秒执行一次内部的函数,
《---myCode-TypeScript---》
setTimeout(() => {
// chara = Gameplay.getCurrentPlayer().character;
// // 这个变量现在才存储了一个玩家角色
// chara.worldLocation = a.check;
// // 玩家的位置读取器输入了a.check成员存储的位置信息
var timer = setInterval(() => {
// if (i < 0) {
// clearInterval(timer);
// }
// chara.worldLocation = a.check;
// i--;
}, 500);
}, 2000);
《---myCode---》
刨去数组相关的代码,如下图,实际上就是对应开头的描述“延迟2000毫秒......,每500毫秒.......”
实现的效果是“延迟2000毫秒执行计时器,每500毫秒计时器执行一次,执行的内容是i++,如果i小于0了,就停止计时,即清除计时器”
《---myCode-TypeScript---》
var i = 5;
// var chara: Gameplay.Character;
setTimeout(() => {
// chara = Gameplay.getCurrentPlayer().character;
// chara.worldLocation = a.check;
var timer = setInterval(() => {
if (i < 0) {
// 如果i小于0,就清除定时器
clearInterval(timer);
}
// chara.worldLocation = a.check;
i--;
// 每500毫秒i减少1
}, 500);
}, 2000);
《---myCode---》
叁.应用说明
这一段讲了数组与位置混合后产生的移动效果,在实际应用中,可以通过设置位置数组,让角色触发连招后闪现到不同位置上进行攻击。我猜崩坏三的闪现打击用到了位置数组。
但是关于数组一个一个倒退读取,从5倒数到0,这个顺序还有别的作用,在下节细聊。
肆.相关参考链接 (返回主站)
普通大学生“数据结构”课作业笔记#000-目录-逻辑结构与存储结构 口袋方舟论坛|面向全年龄的UGC互动内容平台与交流社区 (ark.online)
口袋方舟·“数据结构课作业笔记”#003-数组-简单排列的变量和它们必然命运(中)
于 2023-11-15 16:25:57 首次发布