我们知道SKScene
的来源位于左下角。
但我尝试从包含0和1矩阵的文件中进行简单的级别加载。虽然0表示无效,1表示墙(简单矩形)。
由于文件的内容显然是从左上角到右下角,我想在场景的左上角绘制。
但是文件中的第一个字符是在场景的左下角绘制的。 我尝试将场景的 yScale 设置为-1,希望它反转y轴,但是没有工作。
最简洁的方法是什么SKScene
我总是从左上角开始画画?我仍然希望将anchorPoint
保持在0.5,0.5。
因此,左上角的绘图位于x=-widthOfScreen/2
和y=heightOfScreen/2
答案 0 :(得分:2)
我不确定这是不是你想要的,但是如果你只是想改变坐标系你可以做的是为CGPoint创建一个扩展,比如
//CGPoint+SpriteKit.swift
extension CGPoint {
func flipCoordinates() -> CGPoint {
return CGPoint(x: x, y: UIScreen.mainScreen().bounds.height - y)
}
}
我认为这应该有用,因为你的锚点是(0.5,0.5)
答案 1 :(得分:0)
由于SKSpriteNode允许您使用-1的比例翻转其内容,因此您可以将所有节点放在具有-1的yScale的主SKSpriteNode下。
final class GameScene: SKScene
{
var masterNode:SKSpriteNode! = nil
override func addChild(node: SKNode)
{
if masterNode == nil
{
masterNode = SKSpriteNode()
masterNode.position = CGPoint(x:0, y:size.height)
masterNode.anchorPoint = CGPointZero
masterNode.yScale = -1
super.addChild(masterNode)
}
masterNode.addChild(node)
}
}
请注意,如果/当尺寸发生变化时,您需要使masterNode的位置与视图大小保持一致。
答案 2 :(得分:0)
与Alain T的答案类似,但是将static void LottoMethod(int[] randNums,int[] userNums)
{
Console.WriteLine("Guess 10 numbers");
for(int i = 0; i <= userNums.Length-1; i++)
{
userNums[i] = Int32.Parse( Console.ReadLine());
}
Console.WriteLine("The numbers you entered: ");
foreach(int k in userNums)
{
Console.Write(k+" ");
}
//generate 10 numbers randomly
Random rnds = new Random();
for(int k = 0; k <= randNums.Length - 1; k++)
{
randNums[k] = rnds.Next(1, 26);
}
Console.WriteLine("Random Numbers");
foreach(int i in randNums)
{
Console.Write(i + " ");
}
int correctNums = 0;
//Check if random numbers correspond with entered numbers
try
{
for(int i = 0; i <= randNums.Length-1; i++)
{
for(int j = 0; j <= userNums.Length-1; j++)
{
if (randNums[i] == userNums[j])
{
correctNums++;
}
}
}
Console.WriteLine($"There are {correctNums} numbers ");
}
catch(Exception e) {
throw new Exception(e.ToString());
}
}
与SKCameraNode
一起使用,因此您无需覆盖yScale = -1
函数或具有额外的节点层。
addChild