【教程】JS的正确学习方法
minecraftpejs吧
全部回复
仅看楼主
level 9
小白开坑教小白咯~我尽量把js系统化,方便学习哦~
2015年02月28日 23点02分 1
level 9
二楼艾特
2015年02月28日 23点02分 2
剩下的能在群里叫的就在群里叫了,我也不想艾特那么多,会被吞的[乖]∑(O_O;)
2015年02月28日 23点02分
回复 不穿内裤的黄瓜 :到了
2015年03月01日 03点03分
level 9
三楼备用
2015年02月28日 23点02分 3
@CakeXu32767 @fxhfxh55555 怀着尝试的心态先申精一次吧…∑(O_O;)
2015年03月01日 05点03分
level 9
四楼备用
2015年02月28日 23点02分 4
level 9
五楼备用
2015年02月28日 23点02分 5
level 9
一、认识JS插件及前言
JS是minecraftpe(我的世界手机版)的插件,地位相当于电脑版的mod模组。
JS作为插件原本是从ios开始的,不过后来那位创始人不久就弃坑了……现在我们方块启动器的作者张卓伟大神接手后,JS能在方块启动器的帮助下实现各种的功能,丰富了minecraftpe版还不完善的功能(比如红石,更多怪物,快速建造等等),函数Java等语言演变过来,所以上手也不难,有点基础的基本都能学会。
但本教程的意义在于教会更多的人,可能就得多花点时间了……
当然...楼主不是牛哔哄哄的大角虫,在本教程中也用到了他人教程中的内容,如果侵权我就删掉qwq...在这个教程里如果出现错误也请大家指出......
在观看本教程前,请确保你已经了解了方块启动器的使用方法和mc的基本操作,如果不了解的可以去minecraftpe吧潜水一周。
那么下面列举一些编辑的平台以及对应可使用的软件:
windows:notepad++,UltraEdit(我电脑就用这个)
安卓:920编辑器(记得调语法高亮)
IOS:放弃吧......
linux:gvim
2015年02月28日 23点02分 6
lz能不能给我最开始iOS方块器链接,我想试试看
2015年06月06日 00点06分
那位创始人是张卓伟[汗]
2015年08月24日 13点08分
语法高亮要选那个
2016年04月09日 01点04分
2016年05月01日 14点05分
level 9
剩下的有时间再更,声明一下,此教程为本人纯手打,请尊重本人劳动成果,不喜请点x,喜欢的就点个赞吧~[爱心]
2015年02月28日 23点02分 9
这个我会[吐舌]我会一建生成喷泉生成后出现悬浮窗口   --来自iPhone6 plus客户端
2015年03月01日 11点03分
求教更难的   --来自iPhone6 plus客户端
2015年03月01日 11点03分
问个问题,如何添加附魔物品
2016年01月09日 23点01分
level 9
第三讲、妈妈!我亲眼看见他要打死我家的小动物!
//-----------------------------------------------------------------------------
function attackHook(attacker,victim)
{
if(Entity.getEntityTypeId(victim)==12)
{
preventDefault();
clientMessage("<儿子>:妈妈!我成功从歹徒手里救下了一只母猪!");
clientMessage("<妈妈>:乖儿子~");
}
else if(Entity.getEntityTypeId(victim)==33)
{
preventDefault();
clientMessage("<儿子>:妈妈!我成功从歹徒手里救下了一只苦力怕!");
clientMessage("<妈妈>:乖......Xia~?");
}
}
//-----------------------------------------------------------------------------
都知道我要讲什么了吧?那就是臭名昭著【划掉、威名远扬的if判断句!
不过在讲if之前,要先讲一下这个
①攻击生物的attackHook
function attackHook(attacker,victim){}
这是一个攻击生物以触发的钩子,小括号中的参数分别代表了攻和受...啊不对是攻击者和被攻击者(笑)。同useItem,括号里的形参可以改写,如:
function attackHook(a,v){}//这个比较奇怪,或者可以写成:
function attackHook(player,entity){}//楼主主喜欢这么写
②检测实体ID
Entity.getEntityTypeId(victim)意为检测victim的实体ID,返回值为ID。为什么要写这一句呢?因为如果直接写victim==32,意思就是实体本身是32,当然不对
③阻止默认操作的函数
preventDefault();
意思是:如果你要攻击实体,这个函数会阻止你攻击实体;如果你要放置或破坏方块,这个函数会让方块毫发无损;如果你拿骨粉点草地准备种草,这个函数会阻止你种草......
④if判断句(重中之重)
关于if,要讲的东西很多,我并不准备一次讲完,所以我就讲个基本用法。
-One-
if(条件){内容}
如果这么写,意思是:如果满足小括号里的条件,就执行大括号里的内容。
例如:
if(Entity.getEntityTypeId(victim)==12)
{
preventDefault();
clientMessage("<儿子>:妈妈!我成功从歹徒手里救下了一只母猪!");
clientMessage("<妈妈>:乖儿子~");
}
详细分析起来,意思就是:如果victim这个实体的实体id是12(猪),那么阻止默认动作,并先后显示两条信息。这个应该不难懂。
-Two-
if(条件){内容}else if(条件){内容}
else是剩下的意思,总的来说,就是如果满足第一个小括号里的条件,就执行第一个大括号里的内容,剩下的如果满足第二个小括号里的条件,就执行第二个大括号里的内容。
例子就不举了。
//-----------分割-----------
那么条件应该怎么填呢?这里需要了解一些内容
==等于
===完全等于(用不着)
!=不等于
!==不完全等于(用不着)
<小于
>大于
<=小于或等于
>=大于或等于
&&而且
||或者(位与位或什么的对于小白果然太难了吧)
举个例子吧:
//-----------
var a=7
if(a!=6){内容}
//-----------
我们首先先声明了一个全局变量a=7(听不懂可以跳去看特别讲),然后进行判断,如果a不等于6,那么就执行条件中的内容。
留个作业吧:
//---------------
var a=6
if(a>6||a<6){内容}
//---------------
问:内容是否会执行?
ಇರುವ ಮನೆಗಳನ್ನು ಏನು? 
2015年03月01日 05点03分 17
不会[滑稽]
2015年03月01日 08点03分
回复
Zz��ɫ
:[滑稽]答对咯∑(O_O;)
2015年03月01日 14点03分
y
2015年07月22日 06点07分
"条件"那些都是运算符
2016年02月12日 12点02分
level 9
特别讲、变量与表达式
不论是顺序看过来的还是跳过来的都先看下面的例子:
①能接触到的变量类型及性质
//------------------
var a=1;
var b="1";//也可写作var a=1,b="1";效果一样
function newLevel()
{
print(a+b);
}
//------------------
UP:这个JS显示出来的会是什么呢?
小白:1+1=2 啊我又不傻!
UP:错咯,答案是"1+1=11" ~
小白:Xia~?
UP:别急,我们看看为什么。
//----------------
var a="一";
var b="二";
print(a+b);
//----------------
如果运行这个JS,你会发现:浮窗显示的是"一二"。为什么呢?因为a,b都是字符串变量(用""括起来的),相加时执行的是字符串相加,也就是顺次显示下去。
//----------------
var a=1;
var b=1;
print(a+b);
//----------------
如果运行这个JS你会发现:浮窗显示的是"2"。因为他们都是数字类变量,相加时执行的是数学规则。
理解了上面两个,"1+1=11" 的秘密也就解开了吧~a是数字类变量,b是字符串变量,由于数字类变量后面没有可以进行运算的量,所以就维持原样被显示了出来;而字符串变量本身不能参加运算(强转型的情况忽略),也就直接显示了,所以准确的说,应该是1+"1"=11 。
PS:变量的名字可以是字母和
//-----------分割-----------
②整体变量与局部变量(小白常犯的错误就在这里咯)
来看看小白写的JS:
//--------------------------------------------------------------
function newLevel()
{
var greetings="Welcome to my world!";
print(greetings);
}
function leaveGame()//离开存档时触发的钩子,用法同newLevel
{
print(greetings);
}
//--------------------------------------------------------------
小白:我的JS在开始的时候显示提示,而在离开存档的时候报错了QAQ,UP告诉我为什么?
UP:因为你还不知道整体变量和局部变量的关系。
整体变量,即是在活动区声明过的变量,你可以在任何钩子中调用这个变量。
如上个例子中的:
var a=1,b="1";
它们被声明在了活动区,所以在钩子里调用它们有效果(显示出了它们的值);
而在钩子函数中声明的变量,如你写的例子里的
function newLevel()
{
var greetings="Welcome to my world!";//这句
print(greetings);
}
就是一个临时数据,当钩子运行完了之后,它就会消失,在另一个钩子里就无法调用了,所以导致了第二个函数报错(因为找不到这个变量,启动器会提示你Not Definded之类的)。
小白:QwQ哦
(五分钟后......)
小白:我照你说的改了,但怎么还是有错误?UP难道你是在坑我?
UP:啊嘞?给我看看
小白:
//-------------------------------------------
var greetings="Welcome to my world!";
function newLevel()
{
var greetings="Welcome to my world!";
print(greetings);
}
function leaveGame()
{
print(greetings);
}
//-------------------------------------------
UP(沉思状):......
UP:我知道了!你这是犯了重复设置变量的错误哦~
你先声明了greetings是一个全局变量,然后又在钩子里声明了它是局部变量,然后启动器娘就不高兴了:你这么混乱让人家也不好办啊QAQ!
于是启动器娘就把greetings按照最后一个声明的类型处理了,也就是把它当做一个局部变量,所以在第二个钩子里就调用不了它咯~
总结:以上是两个常见的错误,请大家一定杜绝这种错误哦!
//-----------分割-----------
③表达式
其实这个很简单,跟我们接触的数学运算是一样的:
"+" 加
"-" 减
"*" 乘
"/" 除(也可以理解成分数线)
"%"取余
加减乘除不用说了,如果一个表达式里各种运算都有,先算加减后算乘除;
那取余是什么意思呢?
//------------
var a=22%5;
print(a);
//------------
输出值是2,因为22÷5=4......2
唔...表达式是什么呢?if 的条件可以是表达式,大概意义就是这样咯
2015年03月01日 14点03分 30
(⊙o⊙)哦,我懂了,在钩子前面就是全局,后面就暂时的   --来自iPhone6 plus客户端
2015年03月01日 15点03分
你应该在一开始讲变量的类型
2016年02月12日 12点02分
……是值的类型 String,byte,short,int,long,float,double 之类的
2016年02月12日 12点02分
@哈哈哈哈大笑ok int...double...js里有这东西?
2016年02月12日 13点02分
level 9
顶吗…嘿嘿嘿……
2015年03月02日 04点03分 32
level 9
估计短时间内不能更新吗…嘿嘿嘿……
2015年03月07日 14点03分 41
。。打死   --来自iPhone6 plus客户端
2015年03月07日 15点03分
QQ也不回我   --来自iPhone6 plus客户端
2015年03月07日 15点03分
[泪][泪]   --来自iPhone6 plus客户端
2015年03月07日 15点03分
回复 S帅得被人砍S3 :没上qq ..∑(O_O;)
2015年03月07日 16点03分
level 9
@哈哈哈哈大笑ok @hdhylsb @问问饿了 初三狗表示没太多时间,要补20多天课呢[喷]找到时间会更新的
——本黄瓜待着没事也建了一个个人贴吧呢…只不过估计没人找得到
2015年07月01日 04点07分 79
level 9
楼主决定…更新~
——本黄瓜待着没事也建了一个个人贴吧呢…只不过估计没人找得到
2015年07月11日 11点07分 93
level 9
第四讲、皂滑弄♂人
(这讲是手机码字的,所以可能会有些奇怪吧…)
//--------------------------------
function attackHook(player,entity)
{
if(Player.getCarriedItem()==460&&Entity.getEntityTypeId(entity))
{
Entity.setHealth(entity,0);
}
else{
var probability=Math.ceil(Math.random()*2);//①
switch(probability)//★
{
case 1:
ModPE.setItem(460,"sword",4,"僵尸必须死",1);//②
Item.addCraftRecipe(264,16,0,[460,1,0]);//③
Item.addFurnaceRecipe(460,288,0);//④
Item.addShapedRecipe(460,1,0,[" f "," f "," z "],["f",288,0,"z",276,0]);//⑤
Item.setMaxDamage(460,500);//⑥
print("【僵尸必须死】武器已解锁");
break;
case 2:
Entity.setHealth(entity,0);
Entity.setHealth(player,0);
print("真是皂滑弄♂人啊");
break;
}
}
}
//--------------------------------
大家仔细读一读,猜猜看这次要讲什么?
好吧…主要是新的条件判断switch 和自定义物品及自定义合成熔炼的教程。
先看★部分,将框架提炼出来:
switch(x)
{
case a:
Method
break;
case b:
Method
break;
...
...
case n:
Method
break;
default:
Method
break;
}
这就是switch 的用法,我来解释一下吧…
switch(x)是指用x作为判定的前提
case n:是指用n作为判定的条件
如果x==n,就执行case n:下的Method
由于switch 并不会在满足一个条件后停止选择,我在每个Method 后面添加了break
那为什么添加break 呢?可以认为:break 就是在条件判断中跳出判断的意思,加入了break ,就可以在满足它上面的Method 后跳出判断,不继续判断
那default 又是什么呢?从字面理解,就是默认的意思。如果case 的条件全不满足,就会执行default 下的Method。
那么这个部分就可以理解了:如果有x==a,就会执行case a:下的内容。
再来说说①
var probability=Math.ceil(Math.random()*2);
其中,Math 是javascript预置的类别,通过百度(→_→),我们可以知道,Math下有一部分常量可以直接用,我自己乱分了一下类
//---------------------------------
常量(没有参数咯)
Math.E//自然对数的底数
Math.PI//圆周率,还算有点卵用
Math.LOG2E//以2为底的e的对数
Math.LOG10E//以10为底的e的对数
Math.LN2//2的自然对数
Math.LN10//10的自然对数
Math.SQRT2//根号2
Math.SQRT1_2//根号2的倒数
I类
Math.ceil(num);//上舍入
Math.floor(num);//下舍入
Math.round(num);//四舍五入
Math.max(x,y);//取大
Math.min(x,y);//取小
II类
Math.random(num);//num范围内的随机数
Math.pow(x,y);//x的y次幂
Math.exp(num);//num的底数
Math.log(num);//返回num的自然倒数
Math.tan(num);//返回正切
Math.atan(num);//
Math.atan2(x,y);//
Math.sin(num);//返回正弦
Math.asin(num);//返回反正弦值
Math.cos(nun);//返回余弦
Math.acos(num);//返回反余弦值
Math.sqrt(num);//返回平方根
Math.abs(num);//返回绝对值
III类
Math.toSource();//返回源码
Math.valueOf();//返回原始数值
//---------------------------------
eg.
//---------------------------------
function newLevel(){print(Math.PI)}
//---------------------------------
到底会显示出什么呢…
本人试了一下…
3.14
15926535897
93(下一位应该是2…四舍五入没有矛盾…那就没法证明是我的屏幕小所导致的显示不全…)嗯…那大概就是这几位吧…
//---------------------------------
那这是什么意思呢…?
var probability=Math.ceil(Math.random()*2);
就是声明一个变量,名称就叫probability(概率)
并赋值其为1或者2[random生成了一个0-1的随机数,乘2后就是0-2,再向上取整,就只能是1或者2(这里要是不懂的还是不要继续看下去了)]
那么运行后,probability这个变量要么是1要么是2,排除算法本身的误差后,出现1,2的可能性是相等的。也就是说:只要判定probability是1还是2,就可以进行随机的分歧了。
2015年07月11日 11点07分 94
switch 好像在当前情况下不要大括号
2016年02月12日 12点02分
@哈哈哈哈大笑ok 不用吗…?
2016年02月12日 13点02分
level 9
@哈哈哈哈大笑ok @hdhylsb @问问饿了 更新get√
——本黄瓜待着没事也建了一个个人贴吧呢…只不过估计没人找得到
2015年07月11日 13点07分 95
以后记得at我[阴险]
2015年08月12日 19点08分
level 9
最后留一个自由探究问题
请利用以下内容和拆js的方法,使用setTile和getTile这两个方法(包括但不限于这两种)编写出一个有点卵用的js
提示内容
getTile(par1int, par2int, par3int);
获取指定坐标的方块id
par1int填X坐标
par2int填Y坐标
par3int填Z坐标
返回值为指定坐标的方块id
setTile(par1int, par2int, par3int, par4int, par5int);
设定指定坐标的方块
par1int为X坐标
par2int为Y坐标
par3int为Z坐标
par4int为方块id(0~255,超过范围启动器将自动调整)
par5int为方块特殊数据(0~15,超过范围启动器将自动调整)
如果探究中出现疑问,尽量自己解决,实在解决不了可以来问楼主,那今天的更新就是这样了[吐舌]
2015年07月11日 15点07分 101
level 9
@哈哈哈哈大笑ok——本黄瓜待着没事也建了一个个人贴吧呢…只不过估计没人找得到
2015年07月13日 11点07分 106
字好看[haha]
2015年07月23日 14点07分
回复
��������
:谢谢[太开心]
2015年07月23日 14点07分
level 9
总体思路略有问题…[狂汗]
——本黄瓜待着没事也建了一个个人贴吧呢…只不过估计没人找得到
2015年07月13日 11点07分 107
level 9

ಇರುವ ಮನೆಗಳನ್ನು ಏನು? 
2015年07月16日 14点07分 120
level 9
最近私人事情多,入学和撕逼什么的
2015年08月05日 09点08分 171
撕逼[滑稽]
2015年08月05日 14点08分
撕谁的屄(bi)[滑稽]
2015年08月05日 14点08分

2015年08月13日 11点08分
就入学吗。
2015年08月15日 09点08分
1 2 尾页