最近项目中要实现点击游戏主角附近位置,控制主角的运动,之前总是出现问题,触摸主角左上角时得到的坐标和主角位图在屏幕中的坐标不一致。
最终问题得到解决,一个原因是坐标系的选取是否都选取了屏幕坐标系,第二个原因是主角bitmap在屏幕中的坐标跟屏幕的density 有关。
density = android中图片宽:pc中图片宽 = 1.5
event.getRawY()//得到触摸点在屏幕中的坐标
private void drawImage(Canvas canvas, int x, int y,
Bitmap bsrc, int sx, int sy, int w, int h) {
Rect rect_src = new Rect();
rect_src.left = sx;
rect_src.right = sx + w;
rect_src.top = sy;
rect_src.bottom = sy + h;
Rect rect_dst = new Rect();
rect_dst.left = x;
rect_dst.right = x + w;
rect_dst.top = y;
rect_dst.bottom = y + h;
canvas.drawBitmap(bsrc, rect_src, rect_dst, null);
rect_src = null;
rect_dst = null;
}//This function ignores the density associated with the bitmap. This is because the source and destination rectangle coordinate spaces are in their respective densities, so must already have the appropriate scaling factor applied.
最终解决方案:
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// TODO Auto-generated method stub
float y = event.getRawY()*3/2;
float x = event.getRawX()*3/2;
touch_y = y;
touch_x = x;
// 按ship上方
if ((int) y < (Ship.ship_screen_ypos)) {
Ship.changeShipState(1);
Ship.ship_screen_ypos -= Ship.ship_height;
} else if ((int) y > Ship.ship_screen_ypos+Ship.ship_height) {
// 按ship下方
Ship.changeShipState(2);
Ship.ship_screen_ypos += Ship.ship_height;
}
if((int)x>(Ship.ship_screen_xpos+Ship.ship_width)){
// 加速
ConstantUtil.SPEED+=5;
}else if((int)x<Ship.ship_screen_xpos){
// 减速
ConstantUtil.SPEED-=5;
}
}
return true;
}
分享到:
相关推荐
软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...
android中对Bitmap图片设置任意角为圆角
android bitmap outofMemory 用来解决android中常见的bitmap outOfMemory
Android上解析24位深度Bitmap文件示例
Android bitmap Android Bitmap相关
感觉Uri 、File、bitmap 比较混乱,这里进行记载,方便以后查看.下面话不多说了,来一起看看详细的介绍吧 Bitmap、File与Uri 1、将一个文件路径path转换成File String path ; File file = new File(path) 2...
主要介绍了 Android canvas drawBitmap方法详解及实例的相关资料,需要的朋友可以参考下
Android View转成Bitmap
Android不支持将Bitmap转换成单色的Bmp图片,所以参考Bmp格式说明,自己写了一个转换类。亲测有效!!!
Android下使用Canvas生成验证码Bitmap
Android中bitmap转化成string格式的工具类,主要用于联网操作传递数据情境中
android 通过surfacetexture绘制Bitmap,使用ISurfaceComposerClient创建新图层
对android中3D旋转的代码解释,方便自己学习,如果有android新手的话也可以看看是如何实现的,
将pdf文件转换成图片并显示在界面, 先要引用AndroidPDFViewerLibrary-master ByteBuffer buffer = ByteBuffer.NEW(bytes); String data = Base64.encodeToString(bytes, Base64.DEFAULT); PDFFile pdf_file = ...
android Bitmap相关知识介绍~~~
若是从内存中读取到的Bitmap为空,则在磁盘缓存中读取。 若是从磁盘中读取到的Bitmap为空,则从起始资源中读取 2.开启工作线程,执行从起始资源中读取bitmap的任务 3.计算合适比例,读取适屏的bitmap 4.检查...
Android图片Bitmap和字符串String之间相互转换的工具类,外加项目代码,封装好的,直接可以用,
Android中压缩bitmap的工具类,用于压缩bitmap图片用,适用于图片体积过大而同时显示等对图片质量要求不大的场景
代码是关于bitmap图形特效处理的。有黑白特效、底片特效、浮雕特效、模糊特效、锐化特效、怀旧特效。