Android滑动益智游戏:幻灯片效果

时间:2013-07-11 08:53:55

标签: android slide puzzle

我正试图用图片制作Android益智游戏。 我到目前为止所做的是: - 我已经从EditText字段中删除了多少部分的图片; - 我把剪切的图片放在gridview中并得到了一个拼图表; -i还使用了Collection.suffle(list)来填充gridview中的图像;

现在,我正试图在gridview的两个图像上实现滑动效果。所以我想要实现的是类似于CandyCrush app或这个http://www.youtube.com/watch?v=qUoP87fNB8w的滑动效果。我的意思是,我想要保持一个图像并将其拖到顶部,以便它应该向上滑动。如果我点击图片并滑动到底部,它应该随着它下面的图片改变,依此类推......

这是我的代码:

        Reset = (Button) findViewById(R.id.BReset);
    SplitNo = (EditText) findViewById(R.id.edSplitBy);
    SplitBy = Integer.parseInt(SplitNo.getText().toString());
    ImgNo = SplitBy * SplitBy;
    puzzle = (GridView) findViewById(R.id.puzzle);
    rootImg = (ImageView) findViewById(R.id.source_image);
    splitImage(rootImg);
    formPuzzle(smallimages);
    Reset.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Reset.setText("Reset");
            SplitNo.getEditableText().toString();
            SplitBy = Integer.parseInt(SplitNo.getText().toString());
            ImgNo = SplitBy * SplitBy;
            Collections.shuffle(smallimages);
            formPuzzle(smallimages);
        }

    });

以下是我如何形成这个难题:

private void formPuzzle(ArrayList<PuzzleItem> smallimages) {

    SMI = new SmallImageAdapter(this, smallimages);
    puzzle.setAdapter(SMI);
    puzzle.setNumColumns(SplitBy);
    puzzle.setHorizontalSpacing(0);
    puzzle.setVerticalSpacing(0); }

PuzzleItem.class:

public class PuzzleItem {
Bitmap puzzlepartImage;
int correctPosition;

public PuzzleItem(Bitmap d, int index) {
    puzzlepartImage = d;
    correctPosition = index;
}

我使用这个课只是为了记住碎片的位置,以便我可以检查拼图是否已经完成......

所以我只对如何通过从gridview中拖动项目来实现滑动动作感兴趣...

谢谢:)

编辑:我应该使用OnTouchListener吗?

2 个答案:

答案 0 :(得分:1)

好的,我自己找到了解决方案:

private void formPuzzle(final ArrayList<PuzzleItem> smallimages) {

    SMI = new SmallImageAdapter(this, smallimages);
    puzzle.setAdapter(SMI);
    puzzle.setNumColumns(SplitBy);
    puzzle.setHorizontalSpacing(0);
    puzzle.setVerticalSpacing(0);

    puzzle.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                startX = event.getX();
                startY = event.getY();
                smallimage_Position = puzzle.pointToPosition((int) startX,
                        (int) startY);
                return true;
            }
            case MotionEvent.ACTION_MOVE: {
                endX = event.getX();
                endY = event.getY();
                Log.d("X", "..." +endX);
                Log.d("Y", "..." +endY);
                if(endX > startX + smallimage_Width/2 && (endY < startY - smallimage_Height/2 || endY < startY + smallimage_Height/2) ){
                    PuzzleItem p1 = SMI.smallimages.get(smallimage_Position);
                    PuzzleItem p2 = SMI.smallimages.get(smallimage_Position +1);
                    SMI.smallimages.set(smallimage_Position, p2);
                    SMI.smallimages.set(smallimage_Position +1, p1);
                    SMI.notifyDataSetChanged();
                    startX = endX*200;
                    startY = endY*200;


                }
                return true;
            }
            }
            return true;
        }
    });

幻灯片由MotionEvent.Action_MOVE给出,并通过计算像素,你可以找到手指在哪个方向移动......例如..如果从我的Action_Move案例中识别向右滑动..

我希望这会帮助你们中的一些人......

答案 1 :(得分:1)

在滑块益智游戏中实现幻灯片的另一种方法是使用游戏引擎。我推荐Cocos2D for Android,这里有详细的教程......

http://denvycom.com/blog/step-by-step-guide-on-how-to-build-your-first-slider-puzzle-game-in-cocos2d-for-android-part-1/