首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Sliding Puzzzle游戏:滑动效果

Android Sliding Puzzzle游戏:滑动效果
EN

Stack Overflow用户
提问于 2013-07-11 16:53:55
回答 2查看 4K关注 0票数 1

我正试着用一张图片做一个机器人益智游戏。到目前为止,我所做的是:-我已经将图片剪切成我从EditText字段获得的多少部分;-我已经将剪切的图片放在一个网格视图中,并得到了一个拼图表格;-我还使用了Collection.suffle(列表)来对网格视图中的图像进行置乱;

现在,我正尝试在gridview中的两张图片上实现滑动效果。所以我想要实现的是一种类似于CandyCrush应用程序或http://www.youtube.com/watch?v=qUoP87fNB8w的滑动效果。我的意思是,我想拿着一个图像并将它拖到顶部,这样它就可以滑到顶部了。如果我点击图片并滑动底部,它应该会随着下面的图片而改变,依此类推……

下面是我的代码:

代码语言:javascript
复制
        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);
        }

    });

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
public class PuzzleItem {
Bitmap puzzlepartImage;
int correctPosition;

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

我使用这个类只是为了记住棋子的位置,这样我就可以检查拼图是否完成了……

因此,我只对如何通过从网格视图中拖动项目来实现滑动运动感兴趣……

谢谢:)

编辑:我应该使用OnTouchListener吗?

EN

回答 2

Stack Overflow用户

发布于 2013-07-12 00:55:06

好了,我已经设法自己找到了解决方案:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-02-20 17:48:17

在滑块益智游戏中实现幻灯片的另一种方法是使用游戏引擎。我推荐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/

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

https://stackoverflow.com/questions/17589097

复制
相关文章

相似问题

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