Android:简单实现美女扒衣服小游戏

原创 2015年11月20日 21:59:56

实现思路

说说实现的大概思路,首先要有两副图片。这两幅图片的区别就在于一副有穿衣服,另外一副没有穿衣服,其他的细节都要一模一样。这对于懂ps的童鞋就好办啦自己动手制作就好了。但是本文为了照顾不懂ps的童鞋,提供两幅图片供大家使用~~图中美女不美各位不要吐槽哈~。

A图:没穿衣服(after1)

B图:有衣服的(pre1)

首先一开始是把A图放在屏幕上,然后再把B图覆盖在A图上。那样用户一开始看到的是B图。我们通过,监听手指移动到哪些坐标上,就设置这些坐标的颜色为透明色。那么用户看到的就是A图,也就达到了扒衣服的效果。


大概思路简单叙述完了,那么接下来看看详细代码:


具体实现

首先在xml布局文件写上两个ImageView


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:src="@drawable/after1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/iv2
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
由于我们只需操作B图的像素点的颜色是否透明,所以只给第二个ImageView 定义id,第一个ImageView则不定义id

然后我们看java代码:
首先获取B图的bitmap对象:
       bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.pre1);

在对B图进行处理之前我们先得出B图的副本copyBitmap:
1.创建空白bitmap
copyBitmap=Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
2.实例化Canvas对象,并把copyBitmap传进去
   Canvas canvas=new Canvas(copyBitmap);
3.new一支画笔出来,并设置默认颜色:
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);

4.最后照着B图“画”出来
 canvas.drawBitmap(bitmap, new Matrix(), paint);
就这样copyBitmap就与B图的实例bitmap一模一样了,也就是说已经创建出B图的的副本啦。

最后把copyBitmap显示在表层的ImageView(也就是布局文件中的第二个ImageView)上
 iv2.setImageBitmap(bitmap);

现在运行会看到是这个样子的:




显示图片的步骤就是以上四步,那么接下来我们来实现监听用户手指滑动,并在所滑过的坐标设置为透明。

        iv2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                                    copyBitmap.setPixel(x, y , Color.TRANSPARENT);
                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;
                }

                return true;
            }
        });

copyBitmap.setPixel(x, y , Color.TRANSPARENT);代码就是将坐标为想x,y的像素点设置为透明色,而event.getX()与event.getY()则是分别获取用户触摸控件上的x坐标和y坐标。请注意这里笔者说的是控件上的坐标,并不是屏幕上的坐标。关于屏幕坐标与控件坐标的区别可以看以下博文
http://blog.sina.com.cn/s/blog_4b93170a0102ds4d.html


写到这里,可以运行一下,可以发现是可以“扒掉衣服”但是未免扒得也太慢了吧。为了满足饥渴的大家,为了能够扒衣服扒得快一点可以加上几句代码,变成这样:

 case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                        for (int i = -18; i < 20; i++) {
                            for (int j = -18; j < 20; j++) {
                                try {
                                    copyBitmap.setPixel(x + i, y + j, Color.TRANSPARENT);
                                } catch (Exception e) {
                                    // TODO: handle exception
                                }
                            }
                        }


                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;


聪明的读者一定可以发现,这几句代码的作用就是把目标像素点的周围的像素点也变成透明色,来达到我们手指的作用范围。

写到这里可以发现扒衣服的速度明显快很多。
恩~只有扒衣服未免单一了一点,我们还可以在扒衣服的过程中加点声音。
我们可以在手指滑动之后抬起的时候播放我们预先准备的声音,在手指触摸到屏幕的时候停止播放。

        iv2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:

                            mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.higirl);


                        mediaPlayer.start();;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                        for (int i = -18; i < 20; i++) {
                            for (int j = -18; j < 20; j++) {
                                try {
                                    copyBitmap.setPixel(x + i, y + j, Color.TRANSPARENT);
                                } catch (Exception e) {
                                    // TODO: handle exception
                                }
                            }
                        }


                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;
                    case MotionEvent.ACTION_DOWN:
                        if(mediaPlayer!=null){
                            mediaPlayer.stop();

                            mediaPlayer.release();
                        }

                        break;

                }

                return true;
            }

声音文件笔者放到res\raw里面了。
在这里再运行一次:




最后要用到的图片和声音文件都在demo里面,有兴趣的可以下载一下。


DEMO下载





















版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

扒美女衣服——妄撮游戏实现原理

扒美女衣服原版来自日本妄撮游戏,现在介绍一下它的实现原理。 1、两张美女图片,一张穿着衣服,一张没穿衣服。 2、采用FrameLayout将穿衣服的图片放在上面,没穿衣服的放在下面 3、当触摸图片时,...

Android 小游戏 美女拼图实现

  • 2016年05月06日 11:03
  • 1.06MB
  • 下载

撕掉美女衣服安卓游戏开发(GridView实现画廊效果,带注释)

文章是通过观看黑马

Android应用《撕开美女衣服》的实现过程及源代码

现在很多Android市场中都能找到关于美女的应用,比如 撕开美女衣服、吹裙子等。 这些应用的下载量挺大的,作为Android的开发人员或者一名技术人员我们不能只局限在欣赏应用的层面,很多时候需要我们...

扒衣服小游戏Demo

  • 2015年11月20日 21:55
  • 7.38MB
  • 下载

Android案例(1)——美女拼图小游戏

视频地址: Android美女拼图小游戏 实现功能: (1)多个难度 第一关3*3。 (2)倒计时 (3)图片切分 (4)图片位置变换 第一步: 在src下创建工具包c...

Android 小游戏2048 代码简单实现

package com.my2048;import android.content.Context; import android.graphics.Canvas; import android....

Android小游戏2048的简单实现

今天无聊自己写了个简单的2048,并没有经过什么仔细的设计,只是想自己实现游戏功能,一切以实现功能为主,能最快做出自己想做的东西获得小小的成就感,才有动力继续学习。所以代码很烂,都写在一个类里面了,很...

Android小游戏2048的简单实现

  • 2015年05月27日 19:15
  • 251KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android:简单实现美女扒衣服小游戏
举报原因:
原因补充:

(最多只允许输入30个字)