当编写这样的代码时,为什么y轴反转,这意味着正值使对象下降而负值使其上升?
animation.update();
if(up){
dy -=1.1;
}
else{
dy +=1.1;
}
if(dy>14)dy = 14;
if(dy<-14)dy = -14;
y += dy*2;
dy = 0;
}
public void draw(Canvas canvas)
{
canvas.drawBitmap(animation.getImage(),x,y,null);
}
答案 0 :(得分:7)
请注意,Android屏幕中的原点(0,0)
位于屏幕的左上角角落。因此,当您向y axis
添加值时,对象会向下移动,当减去值时,对象会向上移动。
在Android设备中:
Origin
|
V
*-------------------------------
| ----> X axis |
| | |
| | |
| V Y-axis |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
-------------------------------
可能的历史记录:
当电视机用作屏幕时,屏幕空间计算开始了。电视的光栅枪也从左上角角开始,所以这被认为是原点。
如需进一步参考,请参阅here
<强>转换强>:
但是,您可以使用Canvas.setMatrix()
来使用android中的坐标转换。
您可以使用
翻转Canvas
canvas.translate(0,canvas.getHeight());
canvas.scale(1, -1)
将其移至正确的位置。
您可以参考here进行转换。
答案 1 :(得分:1)
这是解决计算机显示问题的常用方法。它可能源于视频存储器从左上角逐行映射到屏幕,这反过来很可能来自于电子束在旧CRT显示器中扫过屏幕的事实。
您可以使用Canvas.setMatrix()
和适当的变换矩阵将坐标系更改为更“数学”。为了创建“镜像”变换矩阵,使用-1作为缩放操作的参数(即matrix.setScale(0, -1)
)