我正在使用Xamarin上的C#在SpriteKit中创建一个应用程序,我正在尝试定位" Tiles"正确地在1024x768场景上。这是我的瓷砖代码。
public class GameScene : SKScene
{
Tile tile1 = new Tile(320, 320, UIColor.Blue);
Tile tile2 = new Tile(320, 320, UIColor.Blue);
Tile tile3 = new Tile(320, 320, UIColor.Blue);
Tile tile4 = new Tile(320, 320, UIColor.Blue);
public GameScene(IntPtr handle) : base(handle)
{
}
public override void DidMoveToView(SKView view)
{
tile1.numberOfTiles = 4;
tile1.tileNumber = 1;
tile1.setTilePosition();
tile2.numberOfTiles = 4;
tile2.tileNumber = 2;
tile2.setTilePosition();
tile3.numberOfTiles = 4;
tile3.tileNumber = 3;
tile3.setTilePosition();
tile4.numberOfTiles = 4;
tile4.tileNumber = 4;
tile4.setTilePosition();
this.AddChild(tile1.tile);
this.AddChild(tile2.tile);
this.AddChild(tile3.tile);
this.AddChild(tile4.tile);
Console.WriteLine(this.Frame.Size);
}
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
}
public override void Update(double currentTime)
{
// Called before each frame is rendered
}
}
如您所见,瓷砖的尺寸设置为320,320。位置也设置为相同的比率,这应该是正确的。但是,这是模拟器中的输出
正如您所看到的,瓷砖太大而无法放在屏幕上,并且位置不正确。我该如何解决这个问题?如果需要解决此问题的代码,swift或c#都可以。任何帮助将不胜感激。
答案 0 :(得分:1)
这正是你所编码的。
第一
你需要了解方面模式,你正在做一个3:4的场景,但试图在9:16的设备中渲染它,你有4个选择:
.AspectFill:这是XCodes模板中的默认设置,并将缩放 场景达到最远的边界,同时保持纵横比。这个 将导致在设备的更近的边界上进行裁剪而不是 最边界的黑色边框
.AspectFit:这会将场景缩放到最近的边框 保持纵横比。这将导致黑色边框 设备的最远边界代替在更近的地方裁剪 边界
.Fill:这会缩放双方的场景,但不会保留 纵横比,没有裁剪或黑色边框,但会产生 通过脂肪或减肥效果扭曲图像
.ResizeFill:这会将场景坐标的大小调整为 查看它在。这意味着没有缩放,在较大的设备上 精灵会显得更小,整体可见度更高 场景内容。
第二
您需要了解场景的默认原点是左下角,而场景中的所有子项都位于中心。绘制积分时,需要将其生效。
现在从我在这里看到的,你有.ResizeFill
继续,你假设场景的起源是左下角。所以正在发生的事情是你的场景被调整为iPhone 5的大小,并且由于这个调整大小,你的瓷砖现在不在位置,因为场景的中心从点(512,384)变为点(160,284)意味着你需要as减少/减少你在手机上的减少。
我的建议是将.AspectFill
用于ScaleMode
,并将场景AnchorPoint
设置为(0.5,0.5)