0

我正在使用 Android cocos 2d,我有 8-10 个 CCSprites,它们必须通过单击每个精灵来水平滚动,它们是要加载的下一个 CCLayer,因此需要在 CCLayer 中添加 ScrollView,但我不知道如何做到这一点我正在使用 cocos2d -android.jar

我正在使用此代码但无法正常工作:-

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));

        }
        });
4

4 回答 4

2

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

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 上的图层的代码:

@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;
    }

您可以根据您的要求进行编辑

于 2013-09-20T06:19:41.833 回答
2

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

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

如果您对此没有任何想法,请告诉我,我将提供代码。

于 2013-09-20T09:09:04.603 回答
1

您可以通过将所有精灵添加到父图层然后使用 ccTouchesMoved 中的 MoveBy 修改器移动此父图层来完成

于 2013-09-20T03:11:59.690 回答
1

不好意思推迟了。您必须在使用 PrevTouchLocation 之前初始化它,如下所述。

CGPoint PrevTouchLocation = CGPoint.zero();
于 2013-09-24T04:54:40.693 回答