之前已经问过这个问题,但我从来没有找到我想要的答案。
故事是这样的:我想制作一款通用游戏,我将关卡编辑器中的场景大小设置为最大尺寸,2048x1536。
一切都很顺利,直到我实施了iAd,它开始让我对场景产生问题,以及它调整自身以适应所有设备的方式。当我在一个宽度不是2048像素的设备上打开广告时,广告会拉伸场景和其他奇怪的行为。
所以现在我想制作一个iPhone版本和我的游戏的iPad版本,我的问题是:我在关卡编辑器中设置了哪个尺寸?我将它设置为最大的设备之一吗?还是最小的? 如何在场景中定位精灵?
如果它有用,我的不是基于平铺的游戏,我没有一个“世界”。或者相机,现场的内容就是你在游戏中看到的内容。
这是我的GameViewController:
class GameViewController: UIViewController, ADBannerViewDelegate {
var adBannerView: ADBannerView!
func loadAds() {
adBannerView = ADBannerView(frame: view.frame)
adBannerView.delegate = self
adBannerView.hidden = true
view.addSubview(adBannerView)
}
override func viewDidLoad() {
super.viewDidLoad()
if let scene = MainMenuScene.unarchiveFromFile("MainMenuScene") as? MainMenuScene {
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = false
skView.showsDrawCount = false
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
loadAds()
}
}
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return [UIInterfaceOrientationMask.LandscapeLeft, UIInterfaceOrientationMask.LandscapeRight]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func bannerViewWillLoadAd(banner: ADBannerView!) {
print("Ad about to load")
}
func bannerViewDidLoadAd(banner: ADBannerView!) {
adBannerView.hidden = false
print("Displaying the Ad")
}
func bannerViewActionDidFinish(banner: ADBannerView!) {
print("Close the Ad")
}
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
print("Leave the application to the Ad")
return true
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
adBannerView.hidden = true
print("Ad is not available")
}
}
对于广告我已经尝试过所有的scaleModes和让广告正常工作的人(虽然不是很完美)但是在iPhone和iPad上都是.Fill但是我的精灵会按照我不喜欢的方式调整大小39; t喜欢。我使用场景编辑器,因此在代码中更改图像或精灵的位置似乎不是最有效的方法。
答案 0 :(得分:1)
根据您设置对象约束的方式,您可以尝试设置
SKSceneScaleMode
要
.ResizeFill
然后添加以下变量
var screenSize = UIScreen.mainscreen().bounds
var screenWidth = screenSize.width
var screenHeight = screenSize.height
当添加节点和其他对象时,根据screenWidth和screenSize
定位和调整它们的大小