首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在安卓cocos 2d中添加ScrollView?

如何在安卓cocos 2d中添加ScrollView?
EN

Stack Overflow用户
提问于 2013-09-18 10:27:25
回答 4查看 503关注 0票数 0

我正在做Android coos2d,我有8-10 CCSprites,它必须通过单击每个雪碧水平滚动它们的下一个CCLayer来加载,所以需要在CCLayer中添加ScrollView,但是我不知道该如何做,我使用的是cocos2d-android.jar。

我正在使用这个代码,但不起作用:-

代码语言:javascript
复制
final Activity mActivity=CCDirector.sharedDirector().getActivity();

        final View view= LayoutInflater.from(mActivity).inflate(R.layout.level_scroll,null);

        mActivity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            mActivity.addContentView(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        }
        });
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-20 06:19:41

这是您必须添加所有精灵的层:

代码语言:javascript
复制
public class ItemScrollLayer extends CCLayer{

        ArrayList<ExtraProjectileData> spirtes;
        float scaleX,scaleY;
        public ItemScrollLayer(float scaleX,float scaleY,ArrayList<ExtraProjectileData> sprites,float screensize)
        {
            this.scaleX = scaleX;
            this.scaleY = scaleY;
            this.spirtes = sprites;

            float horizontal_distance = 140*scaleX;


            for(int i = 0;i<sprites.size();i++)
            {
                CCSprite indi_sprite = sprites.get(i).getProjectile();
                indi_sprite.setScale(GameActivity.aspect_Scale(indi_sprite, scaleX, scaleY));

                indi_sprite.setPosition(horizontal_distance+(i*screensize),150*scaleY);
                addChild(indi_sprite);
            }
        }
    }

移动放置在我的MainLayer的Touch上的图层的代码:

代码语言:javascript
复制
@Override
    public boolean ccTouchesMoved(MotionEvent event)
    {

        System.out.println("Touches Moved Called for UpgradeMenu");
        CGPoint LocationMoved = CCDirector.sharedDirector().convertToGL(CGPoint.make(event.getX(), event.getY()));
        float difference = LocationMoved.x - PrevTouchLocation.x;

        float posX = scroll_layer.getPosition().x + difference;
        scroll_layer.setPosition(CGPoint.make(posX, 0));
        if(posX > 0){
            scroll_layer.setPosition(CGPoint.zero());
        }
        else if(posX < (-size.width)*(sprites.size()-1)){
            System.out.println("Right Limit Exceeded");
            scroll_layer.setPosition((-size.width)*(sprites.size()-1),0);
        }
        if(difference < -5*GameActivity.VEL_FACTOR){
            direction = -1;
        }
        else if(difference > 5*GameActivity.VEL_FACTOR){
            direction = 1;
        }
        PrevTouchLocation = LocationMoved;

        return true;
    }
    @Override
    public boolean ccTouchesEnded(MotionEvent event)
    {
        endLocation = CCDirector.sharedDirector().convertToGL(CGPoint.make(event.getX(), event.getY()));
        if(!moving)
        {
            float total = startLocation.x-endLocation.x;
            if(direction == 1 && !(counter <=0))
            {

                CGPoint move_pos = CGPoint.make(size.width+total, 0);
                CCMoveBy go_left = CCMoveBy.action(0.5f, move_pos);
                CCCallFuncN regulator = CCCallFuncN.action(this, "regulator");
                CCSequence seq = CCSequence.actions(go_left, regulator);
                moving = true;
                scroll_layer.runAction(seq);


                counter--;
                projectilePriceLabel.setString(getCurrentPrice());


            }
            else if(direction == -1 && !(counter >= sprites.size()-1))
            {

                CGPoint move_pos = CGPoint.make(-size.width+total, 0);
                CCMoveBy go_right = CCMoveBy.action(0.5f, move_pos);
                CCCallFuncN regulator = CCCallFuncN.action(this, "regulator");
                CCSequence seq = CCSequence.actions(go_right, regulator);
                moving = true;
                scroll_layer.runAction(seq);

                counter++;
                projectilePriceLabel.setString(getCurrentPrice());



            }
        }
        PrevTouchLocation = CGPoint.zero();
        return true;
    }

您可以根据需要进行编辑。

票数 2
EN

Stack Overflow用户

发布于 2013-09-20 09:09:04

检查这个,它是垂直滚动的。你只需要改变一点点就能实现。

https://stackoverflow.com/a/12056450/1614340

如果你不知道,请告诉我,我会提供代码。

票数 2
EN

Stack Overflow用户

发布于 2013-09-20 03:11:59

您可以向父层添加所有精灵,然后使用MoveBy修饰符在ccTouchesMoved中移动此父层。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18869788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档