一钩子(hook)函数
当执行了特定动作时,这些函数会运行并执行其他函数
1function useItem(x,y,z,itemId,blockId,side,itemDamage,blockDamage){}
当进行一次点击时(如使用物品或放置方块,食用食物不包括在内)会触发这个函数,并返回数据。
x:被点击方块的x坐标
y:被点击方块的y坐标
z:被点击方块的z坐标
itemId:点击时手里拿的物品id(空手为0)
blockId:被点击方块的id
side:方块被从哪个方向点击
itemDamage:点击时手里拿的物品附加值(伤害值)
blockDamage:被点击方块的附加值(伤害值)
2function attackHook(attacker,victim){}
当点击或攻击了一个生物mob(动物,怪物,玩家(待确认))时会触发这个函数,并返回数据。
attacker:进行了点击或攻击动作的mob
victim:被点击或攻击的mob
3function modTick(){}
每刻(1/20s 005s)执行一次
4function procCmd(cmd){}
在聊天里输入以"/"开头的话文字并执行(回车)时会触发
cmd:在聊天里输入的以"/"开头的文字(不包含"/")
5function newLevel(){}
当世界被载入时(出现"Building terrain"时)会触发
6function leaveGame(){}
当离开当前世界(返回主菜单)时会触发
7function entityAddedHook(entity){}
当一个新的实体被添加(包括箭,下落的方块,点燃的TNT等)时会触发
entity:被添加的自然实体
8function entityRemovedHook(entity){}
当一个实体(包括箭,下落的方块,点燃的TNT等)消失或死亡时会触发
entity:被移除的实体
9function deathHook(murderer, victim){}
当一个生物mod死亡时会触发
murderer:造成死亡的实体
victim:死亡的实体
10function levelEventHook(entity,eventType,x,y,z,data){}
当门(木门,栅栏门,陷阱门)被打开或关闭时会触发
当羊吃掉草时触发
睡觉时触发
entity:动作的实体(观测数据。总是为0)
eventType:事件类型(观测数据。开关门数据为1003,羊吃草的数据为2001,睡觉的数据为9800)
x,y,z:被点击的门方块的坐标,被吃掉的草方块的坐标,睡觉时为(0,0,0)
data:未知(观测数据。开关门,睡觉的数据为0,羊吃草的数据为2)
11function blockEventHook(x,y,z,eventType,data){}
每三秒检查所有箱子的开关状态
x,y,z:箱子的坐标
eventType:事件类型(观测数据为1)
data:未知(观测数据。关闭为0,打开为1,打开过程中为2(待确认)。检查大箱子时第二个被放置的箱子数值改变,另一个一直为0)
12function destroyBlock(x,y,z,side){}
当一个方块被破坏时会触发
x,y,z:方块的坐标
side:方块被从哪个方向破坏
二文字显示函数
也就是在游戏中现实文字的函数,也比较常用。
1print(text);
将数据显示在浮动窗口里
text可以是非实体变量或被"括起来的字符串
如print("text");
2clientMessage(text);
将数据显示在聊天框里
text可以是非实体变量或被"括起来的字符串
如clientMessage("text");
颜色 clientMessage(ChatColor颜色+text);
例子:clientMessage(ChatColorYELLOW + "It's the " + ChatColorRED + "Red " + ChatColorGREEN + "Green " + ChatColorYELLOW + "show!");
颜色表:BLACK,DARK_BLUE,DARK_GREEN,DARK_AQUA,DARK_RED,DARK_PURPLE,GOLD,GRAY,DARK_GRAY,BLUE,GREEN,AQUA,RED,LIGHT_PURPLE,YELLOW,WHITE
三获取坐标函数
即在游戏中获取一个坐标,并使用。
1getPlayerX();getPlayerY();getPlayerZ();
获取玩家的x,y,z坐标
2getPlayerEnt();
获取玩家的实体
3getYaw(ent);
获取实体ent的头部所朝向(左右)的角度值
ent为空时默认为玩家
面向z轴正方向是时为0±360n,面向x轴负方向时为90±360n
4getPitch(ent);
获取实体ent的头部所朝向(上下)的角度值
ent为空时默认为玩家
面向y轴正方向时为-90,面向y轴负方向时为90
5getCarriedItem();
获取玩家手里正在拿着的物品或方块的id
6getTile(x,y,z);
获取坐标为(x,y,z)的方块的id
四实体设置函数
对某个实体设置某种事件,并将其触发。
1setPosition(ent,x,y,z);
将一个实体ent的坐标设置为(x,y,z)
ent:目标实体
x,y,z:目标坐标
2setPositionRelative(ent,x,y,z);
设置指定实体对于玩家的相对位置
ent:目标实体
x,y,z:相对坐标
3setRot(ent,yaw,pitch);
将一个实体的头部方向设为(yaw,pitch)
ent:目标实体
yaw:水平角度
pitch:垂直角度
4setVelX(ent,velocity);setVelY(ent,velocity);setVelZ(ent,velocity);
将一个实体ent的x/y/z轴速度设为velocity
ent:目标实体
velocity:速度
5setTile(x,y,z,blockID,damageValue);
将特定的方块放置
x,y,z:放置的坐标
blockId:放置方块的id
damageValue:放置方块的附加值(伤害值)
6setPlayerHealth(halfHearts);
设置玩家的血量
helfHearts:半心量,20时为满血,但可以更高(<=255)
7setNightMode(boolean);
夜晚模式。此函数尚未被证实能正常使用,但存在于源码中
boolean:布朗值,只能为true或false
五实体生成(spawn)函数
如题,我不多说。
1spawnCow(x,y,z,"image");spawnChicken(x,y,z,"image");
在特定位置生成一只牛/鸡,并将贴图换成image
x,y,z:生成mod的坐标
image:在assets文件夹下的路径
2spawnPigZombie(x,y,z,heldItemID,"image");
在特定位置生成一只僵尸猪人,并将贴图换成image
x,y,z:生成mod的坐标
heldItemID:猪人手里拿的物品id
image:在assets文件夹下的路径
六杂项函数
一些五花八门的杂项函数。
1explode(x,y,z,radius);
在坐标为(x,y,z)处引发一场半径为radius的爆炸
2rideAnimal(player,target);
让player骑在target身上
player,target为实体
3addItemInventory(ID,amount,damageValue);
在背包里添加amount个id为ID,附加值(伤害值)为damageValue的物品
amount可以为负
4preventDefault();
阻止原有动作
七启动器(BlockLauncher-only)函数
这些函数只能在BlockLauncher启动器里使用
1bl_spawnMob(x,y,z,mobID,"image");(停用,请使用LevelspawnMob)
在特定位置生成一个实体,并替换贴图
x,y,z:指定位置
mobID:实体类别id
image:在assets文件夹下的路径
2bl_setMobSkin(mob,"image");
将指定实体的贴图更换
mob:指定的实体(不是实体类别)
image:在assets文件夹下的路径
八Level函数
Levelexplode(x,y,z,radius);
在坐标为(x,y,z)处引发一场半径为radius的爆炸
与explode(x,y,z,radius)相同
LevelgetTile(x,y,z);
获取坐标为(x,y,z)的方块的id
和getTile(x,y,z);相同
LevelsetTile(x,y,z,blockID);
放置方块
和setTile(x,y,z,blockID);相同
LevelgetData(x,y,z);
获取坐标为(x,y,z)的方块的伤害值(附加值)
LevelgetWorldDir();
返回当前世界所在的文件夹的名字
LevelgetWorldName();
返回当前世界的名字
LevelspawnChicken(x,y,z,"image");LevelspawnCow(x,y,z,"image");
在特定位置生成一只牛/鸡,并将贴图换成image
x,y,z:生成mod的坐标
image:在assets文件夹下的路径
和spawnCow(x,y,z,"image");spawnChicken(x,y,z,"image");相同
LeveldestroyBlock(x,y,z,shouldDropItem);
破坏一个方块,拥有正常破坏时的所有特效
x,y,z:方块坐标
shouldDropItem:是否掉落被破坏的方块本身。布尔值,只能为true/false
LeveldropItem(x,y,z,range,id,count,damage);
从指定坐标掉落方块
x,y,z:指定坐标
range;掉落的距离
id:掉落物id
count:掉落物数量
damage:掉落物伤害值
LevelgetAddress();
用途不明。。
返回值是实体。。
LevelgetChestSlot(x,y,z,slot);
读取指定箱子指定位置的物品id
x,y,z:箱子坐标
slot:物品位置
LevelgetChestSlotCount(x,y,z,slot);
读取指定箱子指定位置的物品数量
x,y,z:箱子坐标
slot:物品位置
LevelgetChestSlotData(x,y,z,slot);
读取指定箱子指定位置的物品伤害值(附加值)
x,y,z:箱子坐标
slot:物品位置
LevelsetChestSlot(x,y,z,slot,id,damage,amount);
向箱子指定位置放置物品
x,y,z:箱子坐标
slot:物品位置
id,damage,amount:物品id,伤害值,数量
LevelgetGameMode();
获取游戏模式。生存为0,创造为1。
LevelsetGameMode(mode);
设置游戏模式。生存为0,创造为1。
LevelgetTime();
获取当前时间。0为正午,7200为日落,8280为晚上,13320为日出。
LevelsetTime(time);
设置时间。0为正午,7200为日落,8280为晚上,13320为日出。
LevelgetSignText(x,y,z,line);
获取指定牌子的内容,为空时返回null
x,y,z:牌子的坐标
line:获取的行数,第一行为0
LevelsetSignText(x,y,z,line,"text");
设置指定牌子的内容
x,y,z:牌子的坐标
line:设置的行数,第一行为0
text:内容。必须是字符串
LevelplaySound(x,y,z,sound,volume,pitch);
播放声音
x,y,z:指定坐标
sound:MCPE中的声音
volume:音量
pitch:角度,用途不明
LevelplaySoundEnt(ent,sound,volume,pitch);
ent:自然实体
sound:MCPE中的声音
volume:音量
pitch:角度,用途不明
LevelsetNightMode(boolean);
夜晚模式。此函数尚未被证实能正常使用,但存在于源码中
boolean:布朗值,只能为true或false
与setNightMode(boolean)相同
LevelsetSpawn(x,y,z);
设置复活点
LevelsetTile(x,y,z,blockID);
将特定的方块放置
x,y,z:放置的坐标
blockId:放置方块的id
和setTile(x,y,z,blockID)相同
九Player函数
PlayeraddItemInventory(ID,amount,damage);
在背包里添加amount个id为ID,附加值(伤害值)为damageValue的物品
amount可以为负
和addItemInventory(ID,amount,damage)相同
PlayerclearInventorySlot(slot);
清除背包里指定位置的物品
slot:物品在背包的位置
PlayergetInventorySlot(slot);
获取背包里指定位置的物品id
slot:物品在背包的位置
PlayergetInventorySlotCount(slot);
获取背包里指定位置的物品数量
slot:物品在背包的位置
PlayergetInventorySlotData(slot);
获取背包里指定位置的物品伤害值(附加值)
slot:物品在背包的位置
PlayergetSelectedSlotId();
获取被选中的物品栏的id(slot)
PlayergetArmorSlot(slot);
获取身上的指定装备id
slot:装备位置
PlayergetArmorSlotDamage(slot);
获取身上指定装备的伤害值(耐久)
slot:装备位置
PlayersetArmorSlot(slot,id,damage);
设置身上的装备
slot:装备的位置
id:装备id
damage:装备伤害值(附加值)
PlayergetCarriedItem();
获取玩家手里正在拿着的物品或方块的id
和getCarriedItem()相同
PlayergetCarriedItemCount();
获取玩家手里正在拿着的物品或方块的数量
PlayergetCarriedItemData();
获取玩家手里正在拿着的物品或方块的伤害值(附加值)
PlayergetEntity();
获取玩家的实体
和getPlayerEnt()相同
PlayergetX();PlayergetY();PlayergetZ();
获取玩家的x,y,z坐标
和getPlayerX();getPlayerY();getPlayerZ();相同
PlayersetHealth(health);
设置玩家生命
health:半心量,20时为满血,但可以更高(<=255)
和setPlayerHealth(halfHearts)相同
十Entity函数
EntitysetFireTicks(ent,time);
使实体燃烧
ent:自然实体
time:燃烧时间,单位为秒
EntitygetAnimalAge(ent);
获取动物年龄
ent:动物实体
取值为-24000到0,玩家一直为0
EntitysetAnimalAge(ent,age);
设置动物年龄
ent:动物实体
age:动物年龄(-24000(幼年)到0(成年))
对敌对生物和玩家无效
EntitygetEntityTypeId(ent);
返回实体种类id
EntitygetYaw(ent);
获取实体ent的头部所朝向(左右)的角度值
ent为空时默认为玩家
面向z轴正方向是时为0±360n,面向x轴负方向时为90±360n
和getYaw(ent)相同
EntitygetPitch(ent);
获取实体ent的头部所朝向(上下)的角度值
ent为空时默认为玩家
面向y轴正方向时为-90,面向y轴负方向时为90
和getPitch(ent)相同
EntitysetRot(ent,yaw,pitch);
将一个实体的头部方向设为(yaw,pitch)
ent:目标实体
yaw:水平角度
pitch:垂直角度
与setRot(ent,yaw,pitch);相同
Entityremove(ent);
移除实体。如果玩家实体被移除,玩家将不可见且不可移动
ent:自然实体
EntityrideAnimal(player,target);
让player骑在target身上
player,target为实体
和rideAnimal(player,target)相同
EntitygetHealth(ent);
获取实体生命
ent:生物实体
EntitysetHealth(ent,health);
设置实体生命
ent:生物实体
health:半心量,20时为满血,但可以更高(<=255)
EntitysetCarriedItem(ent,ID,int,DamageValue);
ent:实体。只能是玩家,僵尸猪人,小白(skeletons)
ID:物品id
int:未知值。数字
DamageValue:物品伤害值(附加值)
EntitysetSneaking(ent,boolean);
EntitygetX(ent);EntitygetY(ent);EntitygetZ(ent);
获取实体坐标
ent:自然实体
EntitysetPosition(ent,x,y,z);
将一个实体ent的坐标设置为(x,y,z)
ent:目标实体
x,y,z:目标坐标
和setPosition(ent,x,y,z);相同
EntitysetPositionRelative(ent,x,y,z);
设置指定实体对于玩家的相对位置
ent:目标实体
x,y,z:相对坐标
和setPositionRelative(ent,x,y,z);相同
EntitysetVelX(ent,vel);EntitysetVelY(ent,vel);EntitysetVelZ(ent,vel);
将一个实体ent的x/y/z轴速度设为vel
ent:目标实体
vel:速度
与setVelX(ent,vel);setVelY(ent,vel);setVelZ(ent,vel);相同
EntityspawnMob(x,y,z,mobID,"image");(停用,请使用LevelspawnMob)
在特定位置生成一个实体,并替换贴图
x,y,z:指定位置
mobID:实体类别id
image:在assets文件夹下的路径
与bl_spawnMob(x,y,z,mobID,"image");相同
EntitysetMobSkin(mob,"image");
将指定实体的贴图更换
mob:指定的实体(不是实体类别)
image:在assets文件夹下的路径
与bl_setMobSkin(mob,"image");相同
EntitysetRenderType(ent,type);
用不同的模型来伪装实体
ent:自然实体
type:模型种类(0no idea 1no override 2点燃的TNT 3玩家 4掉落的物品 5 6鸡 7牛 8猪 9羊 10 11僵尸 12小白(骷髅) 13蜘蛛 14苦力怕(jj怪)(替换困难,有概率失败) 15射出的箭 16玩家(因为没有名字标签,游戏会崩溃) 17扔出的鸡蛋 18扔出的雪球 19挂画(游戏崩溃) 20正在掉下落的方块)
实体id:
10:鸡
11:牛
12:猪
13:羊
32:僵尸
33:苦力怕(jj怪)
34:骷髅(小白)
35:蜘蛛
36:僵尸猪人
64:掉落的物品
65:点燃的TNT
66:下落的方块
十一155启动器及以上可用材质函数。
BlockdefineBlock(blockId,name,[textures/六面材质/],0/材料源id/,true/透明/, int renderType/未知/)
BlocksetShape(blockId,x1,y1,z1,x2,y2,z2)//形状
BlocksetDestroyTime(id,time);
BlocksetExplosionResistance(id,res)//爆炸阻力,未实现
BlocksetLightLevel(id,level);
BlocksetColor(id,[color/数组/]);
BlocksetStepSound(blockId,sourceId);//未实现
BlockdefineBlock(blockId,name,[1,2,3,4,5,6/六面材质,右上角为0/],0/材料源id/,true/透明/, renderType)
renderType
0 标准
1 花
2 火把
3 火
4 流体
6 作物
7 门
8 台阶
10 楼梯
11 栅栏
13 仙人掌
14 床
18 玻璃板
19 植物的茎
21 栅栏门
单细胞转录组数据分析在阐述多细胞生物发育与疾病进程方面已经开发了多种新的方法,如比较有名的轨迹推断(TI,trajectory inference)。但是,我们知道,各种轨迹推断方法只是一种利用表达量的排序手段而已,而且严重依赖先验的知识,如根节点的选择。有没有一种技术可以真正的在RNA转录的时候为转录的RNA打上时间的标签呢?
今天,就为大家介绍一种基于RNA代谢标记的单细胞分析方法:dynamo。我们发现当我们真的可以标记RNA新旧之后,其实基于数学上我们对时间的定义,可以开发出许多新的单细胞动力学模型。
单细胞RNA测序提供了整个转录组的快照,但掩盖了RNA生成动态。Qi Qiu等提出了一种单细胞代谢标记的新RNA标记测序(scNT-seq,基于微流控微孔板单细胞RNA标记技术为新格元商业化的DynaSCOPE技术),一种用于大规模平行分析来自同一细胞的新转录和已存在mRNA的方法。该方法基于液滴微流体的方法能够在条形码珠上进行高通量化学转换,有效地用T-to-C替换标记新转录的mRNA。
Qi Qiu等在文章中的数据揭示了时间序列的转录因子活性和在单细胞水平上响应神经元激活的细胞状态轨迹。作者进一步确定了RNA生物发生和衰变的速率,以揭示在多能和罕见的全能双细胞胚胎(2C)干细胞状态之间逐步转换的RNA调控策略。最后,将RNA代谢标记与遗传扰动相结合,确定DNA甲基胞嘧啶双加氧酶作为进入like-2C细胞状态的表观遗传屏障。时间分辨率下的单细胞转录组分析,打开了关于细胞类型特异性RNA调节机制的新线索。
我们知道,RNA水平的动态变化是由RNA转录、加工和降解的相互作用调控的。因此,要了解转录组在不同功能细胞类型中调控的机制,需要对基因表达的时间动态进行细胞类型特异性测量。单细胞RNA测序(scRNA-Seq)的发展使人们对细胞类型和状态的异质性有了更全面的了解。然而,标准的scRNA-Seq方法捕获到的是新转录(“新”)和已存在(“旧”)RNA的混合物,而不能获得RNA的时间动态。
单细胞转录组测序,连同RNA速度(velocity )和代谢标记(metabolic labeling)方法,以前所未有的分辨率揭示细胞状态及其之间的转换关系。然而,充分利用这些数据需要开发出能够预测细胞命运并揭示调控机制的动态模型。在这里,python 分析工具dynamo是一个分析框架,整合固有的剪接与否和标记与否,以估计绝对的RNA速度,重建速度矢量场(vector fields ),以预测未来的细胞命运,并最终使用微分几何分析阐明潜在的调控网络。
在文章 Massively parallel and time-resolved RNA sequencing in single cells with scNT-seq 中,作者将dynamo应用不同的生物学过程,包括预测分化造血干细胞谱系的未来状态,从细胞周期进程中糖皮质激素反应的反卷积、驱动斑马鱼色素沉着的调控网络的表征、确定对SARS-CoV-2感染的可能耐药性途径。
因此,基于RNA代谢标记的工作代表了从定性的、隐式的分化概念到定量和预测理论的重要一步探索。新模型的提出也为之前定性的和描述性质的单细胞数据分析朝着定量和预测迈出一大步。
开发dynamo的初心
在相同的转录本群体中区分新的和旧的RNA,常用的方法依赖于RNA代谢标记,利用外源性核苷类似物,如4-硫嘌呤(4sU)和标记RNA的生化富集。尽管这些方法对RNA动力学调控有重要的见解,但它们需要充足的起始材料,并对富集足够的细胞信号提出了挑战。最近发展了几种方法将4sU化学转化为胞嘧啶类似物,产生尿嘧啶-胞嘧啶复合物,在逆转录后标记新转录的RNA。这些化学方法允许直接测量细胞RNA的时间信息,而不需要生化富集。最近的研究表明,通过将Smart-Seq/plate-based scRNA-Seq与其中一种化学方法(如用于RNA代谢测序的巯基(SH)链烷基化)结合,可以在单细胞水平上联合分析新旧转录组。然而,这些基于Smart-Seq/plate的方法存在一些局限性。首先,它们成本高、耗时长,很难对高度异质性的细胞群进行大规模分析。其次,这些方法缺乏独特的分子标识符(UMIs),无法准确定量新的转录水平。
为了克服这些限制,Qi Qiu等开发了scNT-Seq,一种基于UMI的高通量scRNA-Seq方法,结合了代谢RNA标记、液滴微流体和化学诱导的s4U到胞嘧啶模拟物的编码,同时测量来自同一细胞的新和旧转录组。作者证明,scNT-Seq能够在单细胞水平上对细胞RNA动力学、基因调控网络(GRN)活性和细胞状态轨迹进行时间分辨分析,同时它极大地提高了可扩展性并降低了成本。
Dynamo是一个python库,目前提供了一个完整的解决方案来分析传统scRNA-seq或基于scRNA-seq的时间代谢标记的动力学分析。它渴望成为持续集成机器学习、系统生物学、信息论、随机物理等最激动人心的发展的领先工具,以建模、理解和解释各种尖端单细胞基因组学技术生成的数据集(dynamo 2/3的开发正在进行中)。我们希望这些模型、理解和解释不仅能促进你的研究,而且最终可能导致新的生物学发现。
可以在单细胞分辨率下揭示细胞类型特异性TF调节活性的时间动态。
转录因子(TF)的调控活性可以通过将顺式调控序列与单细胞基因表达联系起来,以单细胞分辨率进行量化。通过scNT-Seq联合分析新的和旧的转录组,可以并行分析由外部刺激诱导的动态调控和与细胞特性相关的稳定调控。通过将单细胞调控网络推断和聚类(SCENIC)应用于成对的单细胞新/旧转录组。作者鉴定出79个协同调节的TF调控,且至少在一种细胞类型中具有显著的顺式调节基序富集。
最近的研究表明,基因表达的时间导数被称为“RNA velocity”,可以通过在scRNA-Seq数据集中区分未剪接(内含子reads)和剪接(外显子reads)的mrna来估计,并用于告知单个细胞的转录状态如何随时间(以小时为尺度)变化。我们首先检验了RNA velocity分析是否能够预测单个细胞在短暂(分钟)和持续(小时)神经元激活时的转录状态轨迹。因为代谢标记可以捕捉RNA水平的快速变化,而通过3 '标记的UMIs检测新的RNA在很大程度上独立于基因结构,我们推断,从scNT-Seq中对新RNA和总RNA的单细胞配对测量可以用来计算按标记时间(单位时间的分子)缩放的基于代谢标记的RNA velocity。作者根据富集靶基因的新转录RNA水平计算这些活性调节转录因子在每个细胞中的调控活性。通过将这些转录因子的调控活性投射到RNA velocity 流上,我们构建了一个针对不同类别转录因子的单细胞分辨率、时间分辨率的调控活性图谱。
通过将TimeLapse化学与高通量液滴微流体平台相结合,scNT-Seq能够共同分析同一细胞的新合成和已存在的转录组,在单细胞水平捕获mRNA的时间信息。传统的RNA速度分析使用内源性RNA剪接动力学来告知细胞的未来轨迹。因此,它受到RNA剪接时间不受控制和许多基因内含子reads稀少性的限制。由于代谢标记周期的时间和长度可以通过实验控制,在scNT-Seq中通过3 '标记的UMIs直接计数新的和旧的转录本,提供了一种无偏性的方法来计算所有可检测基因的RNA动力学参数。
使用计算模型明确地结合了基于代谢标记的单细胞测序,我们可以计算高度动态过程(数分钟或者数小时间)的时间分辨RNA速度。此外,在外部刺激或细胞状态转变期间,测量与TF相连接的靶基因的新RNA水平可以在单细胞水平上刻画TF调节活性。最后,通过脉冲追踪实验,scNT-Seq可以更准确地估计RNA动力学参数,揭示RNA调控策略在罕见细胞群体。
>
ModelAndView以orgspringframeworkuiModelMap的形式来保持模型数据,通过构造方法传入的或者通过实例方法添加的模型数据都将添加到这个ModelMap中。至于ModelMap中保持的模型数据将会在视图渲染阶段,由具体的View实现类来获取并使用。
我们需要为添加到ModelAndView的一组或者多组模型数据提供相应的键(Key),以便具体的View实现类可以根据这些键获取具体的模型数据,然后公开给视图模板。通常,模型中的数据对应的键需要与视图模板中的标志符相对应,如图所示:
基于JSP/JSTL模板的视图实现,通常是将模型数据通过>
但不管什么视图类型,对应的视图模板都将可以通过添加到ModelAndView的模型数据的键来获取模型数据,并合并到最终的视图输出结果中。
:ModelAndView 的构造方法有7个。但是它们都是相通的。这里使用无参构造函数来举例说明如何构造ModelAndView 实例。
ModelAndView 类别就如其名称所示,是代表了MVC Web程序中Model与View的对象,不过它只是方便您一次返回这两个对象的holder,Model与View两者仍是分离的概念。
最简单的ModelAndView是持有View的名称返回,之后View名称被view resolver,也就是实作orgspringframeworkwebservletView接口的实例解析,例如 InternalResourceView或JstlView等等。
ModelAndView(String viewName) 如果您要返回Model对象,则可以使用Map来收集这些Model对象,然后设定给ModelAndView,使用下面这个版本的 ModelAndView: ModelAndView(String viewName, Map model) Map对象中设定好key与value值。
之后可以在视图中取出,如果您只是要返回一个Model对象,则可以使用下面这个 ModelAndView版本: ModelAndView(String viewName, String modelName, Object modelObject) 藉由modelName,您可以在视图中取出Model并显示。
webservletView的实例,View接口如下: public interface View { public void render(Map model, >
View的实作之前用过 orgspringframeworkwebservletviewInternalResourceView,另外也还有JstlView、 TilesView、VelocityView等等的实作,分别进行不同的表现展处理 。
ModelAndView() 这个构造方法构造出来的ModelAndView 不能直接使用,应为它没有指定view,也没有绑定对应的model对象。当然,model对象不是必须的,但是view确实必须的。 用这个构造方法构造的实例主要用来在以后往其中加view设置和model对象。
给ModelAndView 实例设置view的方法有两 个:setViewName(String viewName) 和 setView(View view)。前者是使用view name,后者是使用预先构造好的View对象。
其中前者比较常用。事实上View是一个接口,而不是一个可以构造的具体类,我们只能通过其他途径来获取 View的实例。对于view name,它既可以是jsp的名字,也可以是tiles定义的名字,取决于使用的ViewNameResolver如何理解这个view name。
如何获取View的实例以后再研究。 而对应如何给ModelAndView 实例设置model则比较复杂。有三个方法可以使用: addObject(Object modelObject) addObject(String modelName, Object modelObject) addAllObjects(Map modelMap) ModelAndView 可以接收Object类型的对象,ModelAndView 将它视为其众多model中的一个。
当使用Object类型的对象的时候,必须指定一个名字。ModelAndView 也可以接收没有明显名字的对象,原因在于ModelAndView 将调用spring自己定义的Conventions 类的getVariableName()方法来为这个model生成一个名字。
类名 对象名=new 类名;
这个的意思是声明并初始化,这其实是两步,它这里把它分开了
第7行是声明heroRigibody,但未初始化,此时这个对象为null,它这里声明的是public,所以就可以在外部访问它,为了保证heroRigibody在使用的时候一定为null,它在16行的时候初始化了
Rigidbody2D 是类名,你右键它,在对象浏览器里面可以看到这个类有哪些成员(属性、方法),你也可以直接输入heroRigibody 然后就能在智能提示里面看到它的成员了
InputGetAxis("horizontal")
只是一个方法而已,它这个方法需要string类型的参数,所以直接传的字符串,你也可以分开
string s="horizontal";
moveLR=InputGetAxis(s);
新手建议安装一个Resharper,它会提供大量的代码优化建议
一、武器类
THUGSTOOLS——暴徒武器
PROFESSIONALTOOLS——专业武器
NUTTERTOOLS——高级武器
二、血量类
PRECIOUSPROTECTION——防d衣全满
ASPIRINE——生命值全满
三、天气类
APLEASANTDAY——晴天
ALOVELYDAY——好天气
ABITDRIEG——阴天
CATSANDDOGS——雨天
CANTSEEATHING——雾天
四、交通及行人类
BIGBANG——附近的交通工具全部爆炸
NOBODYLIKESME——所有人都会攻击你
COMEFLYWITHME ——车开到一定程度会飘起来
SEAWAYS——除了摩托以外,车可以在水上开
AIRSHIP——快艇会飘起来
五、车辆类
AHAIRDRESSERSCAR——路上的车变成紫色
AHAIRDRESSERSCAR——路上的车变成黑色
PANZER——得到坦克
THELASTRIDE——得到棺材车
RUBBISHCAR——得到垃圾车
GETTHEREFAST——得到大力马车
六、人物皮肤类
IDONTHAVETHEMONEYSONNY - MAFIOSI皮肤
FOXYLITTLETHING - MAFIOSI女儿的皮肤
LOOKLIKELANCE - LANCE皮肤
MYSONISALAWYER - 律师皮肤
七、游戏运行类
ONSPEED——游戏速度加快
BOOOOOORING——游戏速度变慢
LIFEISPASSINGMEBY——加速时间流动
扩展资料:
“侠盗飞车罪恶都市秘籍”是指《侠盗猎车手:罪恶都市》的游戏中使用的一种作弊代码。使用后会使些功能不能使用。
在游戏中、通过使用作弊代码、可以改变游戏效果、比如出现“生命全满”、“附近所有车子爆炸”、“改变衣服”等。
由 Rockstar North负责开发,Rockstar Games 发行。讲述了一座以美国城市迈阿密为蓝本的虚构城市——罪城中,一名刚刚从监狱释放的黑手党杀手Tommy Vercetti通过一系列的行动铲除盘踞在罪城的毒品老大,登上罪城主人的位置,并为保护位置不被他人所占据而做出行动的故事。
以上就是关于我的世界0.13.1js函数表,并注上解释,,(如果有一些基本的js制作教程就更好了!!全部的内容,包括:我的世界0.13.1js函数表,并注上解释,,(如果有一些基本的js制作教程就更好了!!、时间序列的单细胞转录组数据分析、Java中ModelAndView是做什么的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)