Image UWP我的子弹在画布上与图像相交的位置(相对于图像的坐标)

Image UWP我的子弹在画布上与图像相交的位置(相对于图像的坐标),image,canvas,uwp,2d,coordinate-transformation,Image,Canvas,Uwp,2d,Coordinate Transformation,我试图开发一个2D游戏使用画布。现在我有一个射手和一个目标。射手发射子弹图像。每一帧,我都会检查子弹是否在目标范围内。如果是,我需要知道子弹击中目标的位置,相对于目标左上角。因此,如果我的目标在画布的中心,目标是100 X宽X 100 Y高,我击中底部中心,我希望它返回50100 private void CannonBulletTimer\u勾选(对象发送方,对象e) { 如果(m_bFiredShot) { 如果(m_dCannonBulletTop>0) { m_dCannonBulle

我试图开发一个2D游戏使用画布。现在我有一个射手和一个目标。射手发射子弹图像。每一帧,我都会检查子弹是否在目标范围内。如果是,我需要知道子弹击中目标的位置,相对于目标左上角。因此,如果我的目标在画布的中心,目标是100 X宽X 100 Y高,我击中底部中心,我希望它返回50100

private void CannonBulletTimer\u勾选(对象发送方,对象e)
{
如果(m_bFiredShot)
{
如果(m_dCannonBulletTop>0)
{
m_dCannonBulletTop=m_dCannonBulletTop-m_dCannonBulletStepSize;
CannonBullet.SetValue(Canvas.TopProperty,m_dCannonBulletTop);
Boint .Point点=新的Windows .Frime.Point(MyDcNon BraveLead,MyDcCon NoopToad);
if(弹头内弹头(弹头1))
{
if(获取像素颜色(Bunker1,m_Wb1))
{
杀手子弹();
}
}
}
其他的
{
杀手子弹();
}
}
}
私人布尔Bulletinebunker(图像存储库)
{
bool-ret=假;
m_dBunkerHeight=燃料1.实际高度;
double BunkerLeft=(double)bunker.GetValue(Canvas.LeftProperty);
如果(m_dCannonBulletTop>m_dBunkerTop和&m_dCannonBulletTop如果(m_dCannonBulletLeft-m_dCannonBulletWidth>=BunkerLeft&&m_dCannonBulletLeft我从昨天起就一直在寻找答案。我在发布此消息后终于在这里找到了答案

以下是我的新方法:

private bool GetPixelColors(图像存储库,WriteableBitmap wb)
{
bool-ret=假;
double BunkerLeft=(double)Bunker.GetValue(Canvas.LeftProperty);
double BunkerTop=(double)Bunker.GetValue(Canvas.TopProperty);
int imageX=(int)m_dCannonBulletLeft-(int)燃料库Left;
int imageY=(int)m_dCannonBulletTop-(int)燃料库顶部;
int TransformedY=yCoordinateToPixel(图像Y、存储库、wb);
int TransformedX=xcoordinatedtopixel(图像x、存储库、wb);
对于(int y=TransformedY-2;y