新人小白求助,看过各类教程之后的问题
minecraftpejs吧
全部回复
仅看楼主
level 3
教程我的确看懂了,但是有一点不懂,就是如何画GUI按钮呢?请大神教我[呵呵]
2014年10月05日 09点10分 1
level 11
var ctx = com.mojang.minecraftpe.MainActivity.currentMainActivity.get();
ctx.runOnUiThread(new java.lang.Runnable({
run: function() {
try{
var layout = new android.widget.LinearLayout(ctx);
var btnWindow = new android.widget.Button(ctx);
btnWindow.setText("Click Me~");
btnWindow.setOnClickListener(new android.view.View.OnClickListener() {
onClick: function(v){
/*点击后的事件*/
}
});
layout.addView( btnWindow );
btnWindow = new android.widget.PopupWindow(layout, dip2px(ctx,10 ), dip2px(ctx, 80));
btnWindow.showAtLocation(ctx.getWindow().getDecorView(), android.view.Gravity.TOP | android.view.Gravity.RIGHT, 250, 0);
}catch(err){
print("Sorry! Unable to display the button.");
}
}
}));
}
function dip2px(ctx, dips){
return Math.ceil(dips * ctx.getResources().getDisplayMetrics().density);
}
以上是GUI按钮的格式,以下为个人见解,有误之处敬请不吝指出。
var ctx = com.mojang.minecraftpe.MainActivity.currentMainActivity.get
看得出来,获取Minecraft Pocket Edition的MainActivity,用于以后GUI的创建
ctx.runOnUiThread
也是顾名思义,建立一个UI线程
提一个题外话——try...catch...
----------------华丽的分割线(Start)---------------
try...catch...的作用是:
尝试try{}里的脚本语句,当try{}中的脚本出现错误,且catch(err)时,那么立即执行catch中{}里的内容
用在GUI是为了防止发生错误时"毁档!",
----------------华丽的分割线(End)---------------
var layout = new android.widget.LinearLayout(ctx)
这是声明线性布局
var btnWindow = new android.widget.Button(ctx)
声明按钮,相当于告诉系统你要创建的GUI是按钮
btnWindow.setText("Click Me~")
从setText就看得出来了,设置按钮的文本
btnWindow.setOnClickListener
建立监听器,用于如点击、滑动时做出反应
onClick: function(v)
这东西不用解释了吧,就是点击事件
layout.addView( btnWindow )
在布局中添加按钮
btnWindow = new android.widget.PopupWindow(layout, dip2px(ctx,10 ), dip2px(ctx, 80))
声明悬浮窗,其实就是给按钮摆放用的
btnWindow.showAtLocation(ctx.getWindow().getDecorView(), android.view.Gravity.TOP | android.view.Gravity.RIGHT, 250, 0)
显示悬浮窗,里面的位置,实际上就是按钮的位置了
print("Sorry! Unable to display the button.")
基础知识print,不解释,英语翻译:“对不起!无法显示按钮。”(懂了吧?),至于catch(err),看上面吧
最后解释一下function dip2px(ctx, dips)这个自定义函数吧(别告诉我你不知道自定义函数,如果真不知道,回去学基础吧……)
这函数的作用是获取像素密度,至于Math.ceil(),是数学函数中的向上取整。
好了,到此结束……我手快打残了……
听首歌放松一下
Time Will Tell - X-Ray Dog

2014年10月18日 15点10分 2
@_静_雨_ 掌声 话说现在MCPE里的GUI按钮都是这个代码,连变量名字都一样233
2014年10月18日 16点10分
回复 yhhcat :为了变量名的清晰,就用ctx、layout、btnWindow即可,而且也易理解啊,举例:btnWindow,就是Button Window的意思(翻译即按钮窗口)
2014年10月19日 04点10分
回复 yhhcat :当然,也不排除直接用格式
2014年10月19日 04点10分
至少我看起来就是都在套这个GUI格式,不然为啥有些JS这些地方的缩进都一样233
2014年10月20日 15点10分
1