# Silverlight使多个ellipse产生碰撞的效果，该怎么弄？

0

```namespace silverlight圆球滚动
{
public class Move_Ball
{

private double Max_Width;     //边界宽度
private double Max_Height;    //边界高度
private double Face_X;            //当前X坐标
private double Face_Y;            //当前Y坐标
private double EP_Width;         //控件宽度
private double EP_Height;       //控件高度
/// <summary>
/// 获取或设置边界宽度
/// </summary>
public double max_width { get { return Max_Width; } set { Max_Width = value; } }
/// <summary>
/// 获取或设置边界高度
/// </summary>
public double max_height { get { return Max_Height; } set { Max_Height = value; } }
/// <summary>
/// 获取或设置当前X坐标
/// </summary>
public double face_x { get { return Face_X; } set { Face_X = value; } }
/// <summary>
/// 获取或设置当前Y坐标
/// </summary>
public double face_y { get { return Face_Y; } set { Face_Y = value; } }
/// <summary>
/// 设置控件左右大小
/// </summary>
public double ep_width { get { return EP_Width; } set { EP_Width = value; } }
/// <summary>
/// 设置控件上下大小
/// </summary>
public double ep_height { get { return EP_Height; } set { EP_Height = value; } }

private bool m_fx_x = true;                //x方向
private bool m_fx_y = true;                //y方向
/// <summary>
/// 获取或设置X轴方向
/// </summary>
public bool M_fx_x { get { return m_fx_x; } set { m_fx_x = value; } }

/// <summary>
/// 获取或设置Y轴方向
/// </summary>
///
public bool M_fx_y { get { return m_fx_y; } set { m_fx_y = value; } }

private int m_speed_x;                 //x方向速度
private int m_speed_y;                //y方向速度
/// <summary>
/// X方向速度
/// </summary>
public int sp_x
{
get { return m_speed_x; }
set { m_speed_x = value; }
}
/// <summary>
/// Y方向速度
/// </summary>
public int sp_y
{
get { return m_speed_y; }
set { m_speed_y = value; }
}

public void Start()
{
if (m_fx_y == true)
{
Face_Y = Face_Y + m_speed_y;   // Y轴运动
}
else
{
Face_Y = Face_Y - m_speed_y;
}

if (m_fx_x == true)
{
Face_X = Face_X + m_speed_x;
}
else
{
Face_X = Face_X - m_speed_x;
}

if (face_y <= 0 || face_y+EP_Height >= max_height)    //Y轴改变方向
{
m_fx_y = !m_fx_y;

}
if (face_x <= 0 || face_x+EP_Width>= max_width)    //X轴改变方向
{
m_fx_x = !m_fx_x;

}
}

}
}```

0

1.定义一个函数，比如PositionChanged(object,postionArgs)，在这个函数里判断有没有小球与当前小球位置重叠，这个就要考验你的数学分析水平了。然后根据碰撞的速度和方向决定反弹的速度和方向，以及是否需要速度衰减，仍然属于数学问题。

2.改变start函数，里面的位置变化不能是这么简单，必须是一个有斜率的直线方程，因为小球碰撞后方向是不确定的。

3.在改变后的start函数里，任何位置改变后,都需要调用一次PositionChanged函数。

4.你这个start函数貌似只运行一次就结束了，如果你是一个持续的动画，需要写一个条件循环，反复执行start.

0

您需要登录以后才能回答，未注册用户请先注册