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

扒美女衣服原版来自日本妄撮游戏,现在介绍一下它的实现原理。

1、两张美女图片,一张穿着衣服,一张没穿衣服。

2、采用FrameLayout将穿衣服的图片放在上面,没穿衣服的放在下面

3、当触摸图片时,将触摸位置处的图片设为透明。

这样就可以看到下面没穿衣服的图片,哈哈,是不是很简单。下面来看具体代码:

Layout布局两张图片叠加在一起

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/iv_after"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/iv_before"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</FrameLayout>

主程序代码:

public class bayifu extends Activity {

	private ImageView iv_after;
	private ImageView iv_before;
	private Bitmap alterBitmap;
	private Canvas canvas;
	private Paint paint;
	private Bitmap after;
	private Bitmap before;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		int[] imageIds1 = new int[] { R.drawable.pre1, R.drawable.pre2,
				R.drawable.pre3, R.drawable.pre4, R.drawable.pre5,
				R.drawable.pre6, R.drawable.pre7, R.drawable.pre8,
				R.drawable.pre9, R.drawable.pre10, R.drawable.pre11,
				R.drawable.pre12, R.drawable.pre13, R.drawable.pre14,
				R.drawable.pre15, R.drawable.pre16, R.drawable.pre17,
				R.drawable.pre18, R.drawable.pre19, R.drawable.pre20,
				R.drawable.pre21 };

		int[] imageIds2 = new int[] { R.drawable.after1, R.drawable.after2,
				R.drawable.after3, R.drawable.after4, R.drawable.after5,
				R.drawable.after6, R.drawable.after7, R.drawable.after8,
				R.drawable.after9, R.drawable.after10, R.drawable.after11,
				R.drawable.after12, R.drawable.after13, R.drawable.after14,
				R.drawable.after15, R.drawable.after16, R.drawable.after17,
				R.drawable.after18, R.drawable.after19, R.drawable.after20,
				R.drawable.after21 };
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tuoyifulayout);

		Intent ic = getIntent();
		Bundle bd = ic.getExtras();
		String is = bd.getString("num");
		int position = Integer.parseInt(is);
		BitmapFactory.Options opts = new Options();
		opts.inSampleSize = 1;

		iv_after = (ImageView) findViewById(R.id.iv_after);
		iv_before = (ImageView) findViewById(R.id.iv_before);

		after = BitmapFactory.decodeResource(getResources(),
				imageIds2[position], opts);
		before = BitmapFactory.decodeResource(getResources(),
				imageIds1[position], opts);
		// 可以修改的空白的bitmap
		alterBitmap = Bitmap.createBitmap(before.getWidth(),
				before.getHeight(), before.getConfig());
		canvas = new Canvas(alterBitmap);
		paint = new Paint();
		paint.setStrokeCap(Cap.ROUND);
		paint.setStrokeJoin(Join.ROUND);
		paint.setStrokeWidth(5);
		paint.setColor(Color.BLACK);
		paint.setAntiAlias(true);

		canvas.drawBitmap(before, new Matrix(), paint);
		//在ImageView中设置了重叠的两张图片
		iv_after.setImageBitmap(after);
		iv_before.setImageBitmap(before);

		iv_before.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub

				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					break;
				case MotionEvent.ACTION_MOVE:
					int newX = (int) event.getX();
					int newY = (int) event.getY();
					//将触摸区域,图片的像素设为透明
					for (int i = -10; i < 10; i++) {
						for (int j = -10; j < 10; j++) {
							if (i + newX >= 0 && j + newY >= 0
									&& i + newX <= before.getWidth()
									&& j + newY <= before.getHeight())
								alterBitmap.setPixel(i + newX, j + newY,
										Color.TRANSPARENT);
						}
					}
					iv_before.setImageBitmap(alterBitmap);
					break;
				}
				return true;
			}
		});
	}

}

3、效果图

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

时间: 2024-08-05 11:16:09

扒美女衣服——妄撮游戏实现原理的相关文章

游戏外挂原理解析与制作 - [内存数值修改类 篇一]

本章旨在讲解外挂实现原理,未深入涉及至代码层面.希望能与对这方面感兴趣的朋友多多交流,毕竟理论是死的,套路是固定的,只有破解经验是花大量时间和心血积累的. 对于单机游戏而言,游戏中绝大部分的参数(比如血.蓝.能量亦或是金币)都存储在计算机的堆栈中,一些类似剧情进度的则加密后写入本地的自定义配置文件中: 对于页游.网游和手游,虽然服务器保存了大量的重要的参数,但由于客户端不可避免的需要进行大量的计算和资源的加载,本地内存种必定存有部分的临时变量,通过判断这些变量的变化规律和函数的破密寻到利于自身的

游戏外挂原理解析与制作 - [内存数值修改类 篇二]

本章旨在讲解如何利用高级语言根据变量数值寻找内存地址.涉及代码以C#为例. 我用C#写了一个WinForm形式的Demo,界面如下: 源代码: //血量初始值 private int value = 1000; public Form1() { InitializeComponent(); } /// <summary> /// 刷新界面:将最新的血量显示在界面 /// </summary> /// <param name="sender"><

游戏外挂原理解析与制作 - [内存数值修改类 篇四]

前三篇的博文结合了C#的Demo对内存数据修改一类的挂剖析了原理,利用C#语言调用Windows API,我们其实已经写出了一个简单的内存扫描工具,但是它存在一些缺陷,比如说只能所搜索单一类型数值(整型),只能搜索确定的数值,比如1000.2000,而不能进行模糊搜索,比如搜索某个值变小了,或者在某某区间内变化了等. 我一直认为语言只是一种工具,只要能够达到修改数值的目的,用什么语言都可以,甚至可以配合着多种语言和工具来完成一项数值的修改.其实实际中通常都是这样,因为每种语言有自己的优势,比如C

Android小游戏应用---撕破美女衣服游戏

ImageView after; ImageView before; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); after = (ImageView) findViewById(R.id.after); before= (ImageView) findViewBy

Atitit 游戏的原理与概论attilax总结

1. 游戏历史2 1.1.1. 盘点PC游戏史上最重要的50款游戏2 1.1.2. 回味人类文明进程 五款经典的历史游戏2 2. 游戏类型(主要分为6类:动作.冒险.模拟.角色扮演.休闲和其他)2 3. <游戏设计的100个原理>((美)迪斯潘...)2 4. <游戏>((美)加维...)[3 5. 游戏开发工程师修炼之道3 6. 基础概念 (导演,场景,层,以及精灵,调度器scheduler)3 7. 人机交互(事件分发机制 Event Dispatcher4 8. 主要功能(流

Flash AS游戏引擎原理

其实一提到游戏引擎,很多初学者,会显得有一种畏惧感,会觉得这是一个非常高深的东西.曾经页游行业很乱,就像现在的手游一样,各种非计算机专业出生的同学,经过一个短暂的培训就开始了程序员之旅. 这篇文章仅仅从简单的角度讲解一下游戏引擎在显示渲染上的原理,用位图渲染的方式来实现,供新手们学习交流,如有不足的,望指出. 最简单的图形引擎,主要三个部分:摄影机(Camera),场景画布(Canvas),画布中的显示对象(Displayobject). 为了便于大家理解,我直接把Camera都忽略掉,假设我们

2048 游戏实现原理

记录一下2048游戏的逻辑 这个游戏的本质是二位数组,就以4*4的二位数组来分析关键的逻辑以及实现.二位数组如图1                                    --------> 结果              图1 图2   图3 我们所有的操作都是对这个二维数组的数据的操作.分为上下左右四个方向.我们先说向左的方向(如图2). 向左操作的结果如图3: 当相左的方向是,所有的数据沿着水平方向向左跑,恩,这是:看到的结果. 水平相左: 1:水平说明操作的是二维数组的一行

Android中bitmap图片透明度的处理(以撕美女衣服为例)

原理介绍:将两种不同效果的图片放在相同的位置,改变上面的图片的透明度,就能实现了. 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_h

iPhone撕衣服游戏-图片擦除

原理: 撕衣服游戏的原理就是用两张几乎一样的照片(两张照片的区别就是一张比较保守,一张比较开放,实质是设计师在原本开放的模特照片上P了一层衣服),把开放的图片放在下面,把保守的图片放在上面(每一张图片都放在一张imageView上).撕衣服的过程也就是擦除图片的过程,把手势接触过的地方图片擦除. 步骤: 1.给控制器添加pan手势,并设置监听方法. 2.在监听方法里 2.1 获取当前点 2.2 获取擦除的矩形范围(以当前点为中心,擦除当前点四周指定范围) 2.3 开启上下文 2.4 把控件上的l