lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 10173|回复: 8
打印 上一主题 下一主题

初次学习,麻烦帮帮忙

[复制链接]

2

主题

0

好友

384

积分

帐下督

Rank: 2

跳转到指定楼层
楼主
发表于 2013-8-7 10:50:26 |只看该作者 |倒序浏览
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<script type="text/javascript" src="./js/Box2dWeb-2.1.a.3.min.js"></script>   
<script type="text/javascript" src="./js/lufylegend-1.7.7.min.js"></script>  
</head>
<body>
<div id="mylegend">loading……</div>
        <script type="text/javascript">
                init(10,"mylegend",800,800,main);
                var backLayer,cLayer,wallLayer,bitmap,loadingLayer;
                var imglist = {};
                var birdarr = new Array();
                //var pigarr = new Array(2,3,3,2,4)
                var pigarr = new Array(1,2,3,4,3)
                var imgData = new Array(
                                {name:"bird1",path:"./images/bird1.png"},
                                {name:"pig2",path:"./images/pig2.png"},
                                {name:"stage01",path:"./images/stage01.png"}
                                );
                function main(){       
                        LGlobal.setDebug(true);       
                        backLayer = new LSprite();       
                        addChild(backLayer);       
                       
                        loadingLayer = new LoadingSample3();
                        backLayer.addChild(loadingLayer);       
                        LLoadManage.load(
                                imgData,
                                function(progress){
                                        loadingLayer.setProgress(progress);
                                },
                                function(result){
                                        imglist = result;
                                        backLayer.removeChild(loadingLayer);
                                        loadingLayer = null;
                                        gameInit();
                                }
                        );
                }
                function gameInit(){
                        LGlobal.box2d = new LBox2d();
                       
                        wallLayer = new LSprite();
                        wallLayer.graphics.drawRect(10,"#000000",[0, 0, 800, 800],true,"#cccc80");
                        wallLayer.alpha = 0.3;
                        backLayer.addChild(wallLayer);
                       
                        wallLayer = new LSprite();
                        wallLayer.x = 800;
                        wallLayer.y = 0;
                        backLayer.addChild(wallLayer);
                        wallLayer.addBodyPolygon(800,10,0);
                       
                        wallLayer = new LSprite();
                        wallLayer.x = 0;
                        wallLayer.y = 200;
                        backLayer.addChild(wallLayer);
                        wallLayer.addBodyPolygon(10,800,0);
                       
                        wallLayer = new LSprite();
                        wallLayer.x = 800;
                        wallLayer.y = 800;
                        backLayer.addChild(wallLayer);
                        wallLayer.addBodyPolygon(800,10,0);
                       
                        wallLayer = new LSprite();
                        wallLayer.x = 800;
                        wallLayer.y = 200;
                        backLayer.addChild(wallLayer);
                        wallLayer.addBodyPolygon(10,800,0);
                       
                        for(var i = 0;i<pigarr.length;i++){
                                var _bird = new LSprite();
                                _bird.name = "bird"+String(i);
                                _bird.x = 150+i*100;
                                _bird.y = 50;
                                birdarr.push(_bird);
                                backLayer.addChild(_bird);
                                bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
                                _bird.addChild(bitmap);
                                _bird.addBodyCircle(bitmap.getWidth()*0.5,bitmap.getHeight()*0.5,bitmap.getWidth()*0.5,0);
                                //----------------------------------------
                                var oldSprite = _bird;
                                for(var j = 0;j<pigarr[i];j++){
                                        var _pig = new LSprite();
                                        _pig.name = "pig"+String(j);
                                        _pig.x = 100+i*80;
                                        _pig.y = 90+j*80;
                                        trace("j:"+j);
                                        backLayer.addChild(_pig);
                                        bitmap = new LBitmap(new LBitmapData(imglist["pig2"]));
                                        _pig.addChild(bitmap);
                                        _pig.addBodyCircle(bitmap.getWidth()*0.5,bitmap.getHeight()*0.5,bitmap.getWidth()*0.5,1,.9,.1,.9);
                                       
                                        var _revoluteJointDef  = new LGlobal.box2d.b2RevoluteJointDef();
                                        _revoluteJointDef.Initialize(_pig.box2dBody, oldSprite.box2dBody, oldSprite.box2dBody.GetWorldCenter());
                                        LGlobal.box2d.world.CreateJoint(_revoluteJointDef);
                                       
                                        oldSprite = _pig;
                                }
                        }
                }
        </script>
</body>
</html>
为什么  pig 的位置会离bird的位置越来越远。y的值都是一样的啊??
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2013-8-7 23:58:20 |只看该作者
这是你新建bird的代码,坐标x是以100为单位增加的
  1. var _bird = new LSprite();
  2.                                 _bird.name = "bird"+String(i);
  3.                                 _bird.x = 150+i*100;
  4.                                 _bird.y = 50;
  5.                                 birdarr.push(_bird);
复制代码
下面是你新建pig 的代码,坐标x是以80为单位增加的
  1. var _pig = new LSprite();
  2.                                         _pig.name = "pig"+String(j);
  3.                                         _pig.x = 100+i*80;
  4.                                         _pig.y = 90+j*80;
复制代码
这样,当它们之间建立关节的时候,每一组的bird和pig的距离大小是不一样的,因为pig的x坐标以80递增,也就是说越往后,pig离bird就越远。
如果要每一组距离都相同,
把_pig.x = 100+i*80;改成_pig.x = 100+i*100;就可以了。
不回答与技术和引擎不相关的问题
回复

使用道具 举报

2

主题

0

好友

384

积分

帐下督

Rank: 2

板凳
发表于 2013-8-8 09:13:01 |只看该作者
真的是这样,非常感谢lufy,是自己粗心了。
回复

使用道具 举报

2

主题

0

好友

384

积分

帐下督

Rank: 2

地板
发表于 2013-8-12 10:04:40 |只看该作者
lufy 发表于 2013-8-7 23:58
这是你新建bird的代码,坐标x是以100为单位增加的下面是你新建pig 的代码,坐标x是以80为单位增加的这样, ...

还有一个问题想请lufy帮忙。
在这种情况下,如果给backLayer添加如下事件。
var picX = 0;
var picY = 0;
var picBool = false;
backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onPicdown);
function onPicdown(event){
        picBool = true;
        picX = event.selfX;
        picY = event.selfY;
        event.clickTarget.addEventListener(LMouseEvent.MOUSE_MOVE, onPicMove);
        event.clickTarget.addEventListener(LMouseEvent.MOUSE_UP, onPicUp);
}

function onPicUp(event){       
        picBool = false;
        event.clickTarget.removeEventListener(LMouseEvent.MOUSE_MOVE, onPicMove);
        event.clickTarget.removeEventListener(LMouseEvent.MOUSE_UP, onPicUp);
}
function onPicMove(event){       
        if(picBool){
                event.clickTarget.x = event.offsetX-picX;
                event.clickTarget.y = event.offsetY-picY;
        }
}
_bird,_pig都不会因为backLayer位置的变化,发生变化。为什么啊?还是我写错了???
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

5#
发表于 2013-8-12 17:25:29 |只看该作者
Justin 发表于 2013-8-12 10:04
还有一个问题想请lufy帮忙。
在这种情况下,如果给backLayer添加如下事件。
var picX = 0;

既然已经进入了物理世界,自然要用物理世界的事件和方法了
如果想要鼠标拖动物体,调用setBodyMouseJoint函数就可以了,
如你前面代码,只需要在_pig.addBodyCircle的后面加上一行
  1. _pig.setBodyMouseJoint(true);
复制代码
这样就可以用鼠标拖拽_pig对象了
demo连接看这里
http://lufylegend.com/demo/test/16.html
不回答与技术和引擎不相关的问题
回复

使用道具 举报

2

主题

0

好友

384

积分

帐下督

Rank: 2

6#
发表于 2013-8-13 09:47:41 |只看该作者
lufy 发表于 2013-8-12 17:25
既然已经进入了物理世界,自然要用物理世界的事件和方法了
如果想要鼠标拖动物体,调用setBodyMouseJoint ...

的确是这样子的。
其实我的想法是移动backLayer是否也可以改变_pig,_bird的位置。
而backLayer并没有用到物理世界的事件和方法。
也就是说移动backLayer是改变不了_pig,_bird的位置的是吗?
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2013-8-13 10:12:44 |只看该作者
Justin 发表于 2013-8-13 09:47
的确是这样子的。
其实我的想法是移动backLayer是否也可以改变_pig,_bird的位置。
而backLayer并没有用 ...

backLayer是_pig和_bird的父级对象,也属于物理世界的一部分,
修改backLayer的坐标是可以改变_pig和_bird的位置的,
在backLayer的坐标改变后需要加上下面一行代码
  1. LGlobal.box2d.synchronous();
复制代码
它的作用是重新计算物理世界中各对象的坐标
具体例子,可以看一下下载包中愤怒的小鸟的demo
不回答与技术和引擎不相关的问题
回复

使用道具 举报

2

主题

0

好友

384

积分

帐下督

Rank: 2

8#
发表于 2013-8-14 09:29:45 |只看该作者
lufy 发表于 2013-8-13 10:12
backLayer是_pig和_bird的父级对象,也属于物理世界的一部分,
修改backLayer的坐标是可以改变_pig和_bir ...

谢谢lufy。昨天才收到你写的那本书。
还不错哦。
题外话,每次写你的名字lufy,让我想起“路飞”。
超喜欢看的一部动画

回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

9#
发表于 2013-8-14 09:38:28 |只看该作者
Justin 发表于 2013-8-14 09:29
谢谢lufy。昨天才收到你写的那本书。
还不错哦。
题外话,每次写你的名字lufy,让我想起“路飞”。

此lufy非彼luffy也,哈
不用客气,有问题可以继续发帖
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-20 03:30 , Processed in 0.052491 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部