示例#1
0
void HandleCollision(Tile tile) {
	double overlapX, overlapY;
	if (localPlayer.midpoint().x > tile.midpoint().x) overlapX = tile.right() - localPlayer.left();
	else overlapX = -(localPlayer.right() - tile.left());
	if (localPlayer.midpoint().y > tile.midpoint().y) overlapY = tile.bottom() - localPlayer.top();
	else overlapY = -(localPlayer.bottom() - tile.top());

	if (overlapX != 0 && overlapY != 0) {
		if (abs(overlapY) < abs(overlapX)) {
			if (overlapY < 0) {
				if (localPlayer.velocityY > 0) {
					localPlayer.onGround = true;
					localPlayer.position.y += overlapY; localPlayer.velocityY = 0;
					if (std::find(groundTileList.begin(), groundTileList.end(), tile) == groundTileList.end()) groundTileList.push_back(tile);
				}
			}
			else {
				if (localPlayer.velocityY < 0) {
					if (CheckCollisionBottom(tile)) { localPlayer.position.y += overlapY; localPlayer.velocityY = 0; }
				}
			}
		}
		else {
			localPlayer.position.x += overlapX; localPlayer.velocityX = 0;
		}
	}
}
示例#2
0
bool CheckCollision(Tile tile) {
	if (localPlayer.left() <= tile.right() &&
		localPlayer.right() >= tile.left() &&
		localPlayer.top() <= tile.bottom() &&
		localPlayer.bottom() >= tile.top()) {
			return true;
	}

	return false;
}