就跟处理下落的碰撞一样,如果你理解了下落的碰撞,那么左右移动的碰撞只不过就是扫描的点不一样。左移是扫描最左边的点,右移是扫描最右边的点。直接上碰撞处理的代码:
// 能否左移
bool CanMoveLeft()
{
// 记录位于左侧的点 - 作为碰撞点
List<MyPoint> collidePoints = new List<MyPoint>();
// 扫描行 - 从上至下
for (int line = _blockLayer.Size._height - 1; line >= 0; line--)
{
// 扫描列 - 从左至右
for (int list = 0; list < _blockLayer.Size._width; list++)
{
if (_blockLayer.IsCanSee(new MyPoint(line, list)))
{
collidePoints.Add(new MyPoint(line, list));
break;
}
}
}
// 世界坐标下的碰撞点
List<MyPoint> collidePointsInWorld = new List<MyPoint>();
// 将所有碰撞点转换为世界坐标
ConvertPointInWorld(collidePoints, collide-PointsInWorld);
// 判断是否与默认图层碰撞
foreach (var item in collidePointsInWorld)
{
if (item._list == 0 || _defaultLayer.IsCanSee(new MyPoint(item._line, item._list - 1)))
{
return false;
}
}
return true;
}
右移的代码请参考附件。
碰撞的代码写完后,在左移方块中添加一个判断:
// 左移方块
void MoveLeftBlock()
{
if (CanMoveLeft())
{
MyPoint newPoint = _blockLayer.Point;
newPoint._list -= 1;
_blockLayer.Point = newPoint;
_screenMain.RefreshScreen();
}
}
右移也作类似的处理。
好了,本节结束。
代码链接:https://pan.baidu.com/s/1tcSCTqAOk8j7lYMtRDgJAg
提取码:9498
网友评论