javascript 人物逼真行走,已完成
先欣赏,走两步试试.
神魔对决3(暂定名,神魔对决2续作) - 前期开发工程,业余时间搞搞而已~
本人无敌野球拳(业余jscoder)~,捏哈哈..
作者:风云舞
欢迎访问bbs.51js.com无忧脚本,大牛一堆!^-^
function window.onload(){ //启动,反正一切为了 - 效率,还是效率...程序效率.
yidong.hei=img1.offsetHeight;yidong.wid=img1.offsetWidth
}
var time1=null //全局
var yidong={yibu1:0,yibu2:0,su:3,haomiao:25, //移动/json程序集合
zhenx:1,zheny:1,hei:0,wid:0,
jiange:6,
cle:function(){if(time1!=null){clearInterval(time1);time1=null;yidong.yibu1=0;yidong.yibu2=0;}},
clips:function(){with(yidong){img1.style.clip="rect("+(12.5*zheny-12.5)+"% "+25*zhenx+"% "+(12.5*zheny)+"% "+25*(zhenx-1)+"%)"}},
ck:function(obj){ //RPG ck
with(yidong){
cle();var newx=event.x-30;newy=event.y+15,oldx=obj.offsetLeft;oldy=obj.offsetTop
var x1=Math.abs(newx-oldx),y1=Math.abs(newy-oldy)
if(y1>x1){var x2=su/(y1/(newx-oldx));yibu2=Math.abs(x1/x2);newy-oldy>0?y2=su:y2=-su;}
else{var y2=su/(x1/(newy-oldy));yibu2=Math.abs(y1/y2);newx-oldx>0?x2=su:x2=-su;}
var su2=su/2
if(x2su2)zheny=5; //左下
else if(x2>su2&&y2su2&&y2>su2)zheny=6; //右下
else if(x20&&Math.abs(y2)0)zheny=1; //下
img1.style.top=-(hei/8*zheny);clips();
time1=setInterval(function(){move(obj,x2,y2)},haomiao)
}},
move:function(obj,x2,y2){ //RPG move
with(yidong){
if(++yibu1>yibu2)return cle();obj.style.left=x2*yibu1+oldx;obj.style.top=y2*yibu1+oldy;
if(++img1.jiange>jiange){
img1.jiange=0;zhenx
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
然后请分析下程序,我出以下题目,供牛牛们练手(RPG游戏开发 - 实战,不搞理论,着重程序实现思路).
1:我的程序,你还能否再精简?优化/改编算法?提高效率?试试吧,不过不能说太容易..提示:我目前认为,判断8个移动方向的程序,虽然效率可以,但IF ELSE的写法真有点老套,我也在想新的思路来简化这段程序,你若有,就漏两手吧!
2:都想玩寻路是吧?哈哈,那么就请试试碰触那个蓝色方块?注:假设,将来出现的障碍,是随机的,不是固定的..你碰到了比说任何蓝色障碍,就停住,或说,饶过去....提醒你:关键是思路.
3:有个问题我也不知道,就是CSS的clip,我发现就是,虽然裁剪了一小块,但其他被裁掉的部分,虽然看不见,但是,依然占用地方(原大小),比如,人物走到中间,却因为空白的下半部分超出,就会有滚动条了,这个,能不能就硬性去掉裁剪掉的部分?不让其影响滚动条?(别说BODY加上scroll=no就完事了,这个我可知道^-^)
4:谁有本事改成FF也能运行?注:我没装那玩意,哈哈,不过,我认为不太容易/可能很难改....
注:以上4点,你只需完成一点即可(就很牛),当然了,你4点都能/都想解决,那更牛B了,呵呵开个玩笑,反正随便你^-^.
以下是新增的内容:
1:采取了campaign的建议,使用其超级三元表达式,支持多行?能加注释?堪比多个IF ELSE?真牛..使用了,剩了不少代码.
2:借鉴了winter的思路,使用CSS的backgroundPosint方式代替了clip裁剪,简便易用....一个DIV就搞定了,无需在包容一个IMG
3:参考了理论家hax的代码,HTML代码使用了兼容写法,不过,JS程序没浏览器测试,无法写标准,呵呵..
4:自己,又实现了[鼠标按住],不停变换方向移动,你这次测试,可以单击,可以一直按住鼠标左键不停移动...思路就是用一个计时器不停检测,也占极少CPU,不知大家还有没更好思路?还有,用了setCapture()这种鼠标锁定.
5:自己,经测,堵住了几个异常漏洞(当值为0或NaN时,就说,应该不会再出错误)
精简/优化后的程序:
神魔对决3(暂定名,神魔对决2续作) - 前期开发工程,业余时间搞搞而已~
本人无敌野球拳(业余jscoder)~,捏哈哈..
作者:风云舞
欢迎访问bbs.51js.com无忧脚本,大牛一堆!^-^
var ckin=false,$=Math.abs,time1=null //全局,变量加速.
var yidong={yibu1:0,yibu2:0,oldx:0,oldy:0,evx:0,evy:0,su:4,haomiao:20, //移动/json程序集合
zhenx:1,zheny:1,jiange:5,min:64,
cle:function(){if(time1!=null){clearInterval(time1);time1=null;yidong.yibu1=0;yidong.yibu2=0;}},
clips:function(){me.style.backgroundPosition=(-yidong.zhenx+1)*yidong.min+" "+(-yidong.zheny+1)*yidong.min;},
//上面新采取winter的backgroundPosition思路,感觉比clip方便多了..★★★★★好使!
ck:function(obj){ //RPG ck
with(yidong){
cle();var newx=evx-30,newy=evy-50
oldx=obj.offsetLeft,oldy=obj.offsetTop
var x1=$(newx-oldx),y1=$(newy-oldy)
if(y1>x1){var x2=su/(y1/(newx-oldx));yibu2=$(x1/x2);newy-oldy>0?y2=su:y2=-su;}
else{var y2=su/(x1/(newy-oldy));yibu2=$(y1/y2);newx-oldx>0?x2=su:x2=-su;}
if(x2==0||x2==NaN||y2==0||y2==NaN)return; //这里新堵住了值为0/NAN的异外漏洞
var su2=su/2
zheny=x2su2?5: //左下
x2>su2&&y2su2&&y2>su2?6: //右下
x20&&$(y2)yibu2)return cle();try{obj.style.left=x2*yibu1+oldx;obj.style.top=y2*yibu1+oldy}catch(e){}
if(++obj.jiange>jiange){
obj.jiange=0;zhenx
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]