在移植已有 Corona 项目之前,请确保它使用了 Windows Phone 8 的 CoronaCards 支持 的功能。
build.settings
文件、iOS/Android 应用图标、启动图像以及不属于 Windows Phone 平台的其他项目。.xap
捆绑包中。这是 Visual Studio 无法识别的文件扩展名的必要条件,例如 .ttf
、.json
和其他文件类型。诸如 Icon.png
、Icon-hdpi.png
等 Corona 图标图像文件在 Windows Phone 中不支持,并将被忽略。因此,您应该从 Visual Studio 项目的 Assets\Corona
目录中省略这些文件。
要在 Windows Phone 中包含应用程序图标,请创建一个名为 ApplicationIcon.png
的 100×100 像素的 PNG 图像文件。当您在 Visual Studio 中创建一个新的 Windows Phone 项目时,项目中的 Assets
目录中将自动生成一个默认的 ApplicationIcon.png
。您应该用自定义图像编辑或替换此文件。与 iOS 或 Android 不同,Windows Phone 不支持不同分辨率的多个应用程序图标文件 — 操作系统将简单地缩放主图标。
Windows Phone 还可以为您的应用程序在开始屏幕上显示一个磁贴。当您在 Visual Studio 中创建一个新的 Windows Phone 项目时,项目的 Assets\Tiles
目录下将自动创建默认磁贴图像。有关磁贴支持的更多详细信息,请参阅 Microsoft 文档。
对于 iOS 和 Android 项目,您通常通过 build.settings
文件指示支持的方向。此文件在 Windows Phone 上不支持并且会被忽略。因此,您应该从 Visual Studio 项目的 Assets\Corona
目录中省略此文件。
若要设置 Windows Phone 应用程序的方向,请按照以下步骤操作
MainPage.xaml
文件。<phone:PhoneApplicationPage>
标记的 SupportedOrientation
属性。在 Lua 中,可以使用以下代码检查应用程序是否在 Windows Phone 上运行
if ( system.getInfo("platformName") == "WinPhone" ) then -- This app is running on Windows Phone end
Windows Phone 拥有一个“返回”键,就像 Android 设备一样。按此键将退出应用程序,因此您需要重写此键,并在自己的 Corona 场景中实现向后导航,然后再允许应用程序退出。
local function onKeyEvent( event ) -- If the 'back' key was pressed on Android or Windows Phone, prevent it from backing out of your app local platformName = system.getInfo( "platformName" ) if ( platformName == "Android" ) or ( platformName == "WinPhone" ) then if ( event.keyName == "back" ) then -- Navigate back one scene or display an 'Are you sure you want to exit' alert return true end end -- Return false to indicate that this app is *not* overriding the received key. -- This lets the operating system execute its default handling of this key. return false end -- Add the key event listener Runtime:addEventListener( "key", onKeyEvent )
Windows Phone 操作系统在接收到来电时不会自动暂停您的应用程序。相反,当发生电话时,Windows Phone 会在应用程序上覆盖一个通知,但应用程序将继续运行。因此,Microsoft 允许开发人员决定应用程序是否应在电话期间暂停。但是,游戏在电话期间应该暂停,并且如果不暂停,Microsoft 将拒绝您的游戏进入 Windows Phone 商店。
在操作系统引发 .NET Obscured 事件时,您可以检测到电话中断。但是,请注意,当收到通知时,此事件也会引发。目前,没有办法区分这两种事件,但您可以以类似的方式处理它们,因为 Windows Phone 通知会阻碍屏幕的很大一部分,并且在这两种情况下都应该暂停游戏。
若要在此事件中暂停应用程序,请执行以下操作
MainPage.xaml
文件下方的 MainPage.xaml.cs
文件。// [C#] public partial class MainPage : PhoneApplicationPage { public MainPage() { // Initialize this page's components that were set up via the UI designer. InitializeComponent(); // Set up Corona to automatically start up when the control's Loaded event has been raised. // Note: By default, Corona will run the "main.lua" file in the "Assets\Corona" directory. // You can change the defaults via the CoronaPanel's AutoLaunchSettings property. fCoronaPanel.AutoLaunchEnabled = true; // Set up the CoronaPanel control to render fullscreen via the DrawingSurfaceBackgroundGrid control. // This significantly improves the frame rate and is the only means of achieving 60 FPS. fCoronaPanel.BackgroundRenderingEnabled = true; fDrawingSurfaceBackgroundGrid.SetBackgroundContentProvider(fCoronaPanel.BackgroundContentProvider); fDrawingSurfaceBackgroundGrid.SetBackgroundManipulationHandler(fCoronaPanel.BackgroundManipulationHandler); // Add application event handlers. App.RootFrame.Obscured += OnAppObscured; App.RootFrame.Unobscured += OnAppUnobscured; } private void OnAppObscured(object sender, ObscuredEventArgs e) { if (e.IsLocked == false) { fCoronaPanel.Runtime.Suspend(); } } private void OnAppUnobscured(object sender, EventArgs e) { fCoronaPanel.Runtime.Resume(); } }
您可以通过 Windows Phone 模拟器模拟电话或通知中断。这样可以轻松测试并验证上述解决方案是否正常运行。
通过 display.newText() 或 display.newEmbossedText() 生成的文本,以及 widgets 中的文本渲染,这是一个在 Windows Phone 上速度慢且昂贵的操作。此性能问题是由操作系统的原生文本渲染 API 引起的,并且无法通过 Corona Labs 进一步优化。
针对此性能问题的解决方法之一是使用“位图”字体。这意味着要设置一个 imageSheet,其中包含所有必需的字母/字符,然后通过 display.newImage() 或 display.newImageRect() 对象渲染文本。这将极大地提高您的应用程序的文本渲染性能,因为所有字符都将被
可以考虑以下第三方位图字体库
请注意,位图字体库最适合用于受您应用程序控制的文本。这意味着不应该将其用于从 Facebook、Twitter 或其他外部源获取的文本字符串,因为该文本可能包含未包含在您的 imageSheet 中的特殊字符。在这种情况下,使用 display.newText() 是可以接受的,因为文本不太可能频繁更新/更改。
最后,关于小部件,仅当小部件包含文本(例如插入到的文本)时,才会出现性能损失 tableView 行。在此时插入文本时,您应该
如果 Corona 项目包含 .ttf
或 .otf
字体文件,且希望通过 display.newText() 或类似函数使用它,则必须使用以下字体命名约定,这是 Corona 用于加载嵌入字体的一种标准 Windows Phone XAML 字体命名标准。
local fontName = "<MyFontNamePlusExtension>#<My Font Family Name>"
例如,如果将名为 Times.ttf
的 Times New Roman 字体文件复制到项目的 Assets\Corona
文件夹,则它可能会以以下方式显示
local myText = display.newText( "My Text", 0, 0, "Times.ttf#Times New Roman", 8 )
在 Windows 中,你可以通过双击 .ttf
或 .otf
文件来确定其字体系列名称。这将显示一个窗口,其中在标题栏或 字体名称: 字段旁边显示了字体系列名称。
请注意,Windows Phone 可能拒绝加载某些字体文件,并改用系统字体。如果操作系统拒绝加载你提供的特定字体,则需要使用其他字体文件,或使用位图字体库生成位图字体。
对于 Windows Phone 上的音频播放,CoronaCards 支持以下音频文件格式
.ogg
(Ogg Vorbis).wav
(16 位未压缩)Windows Phone 8 版的 CoronaCards 不支持 音频 录制 功能。
Windows Phone 8 版的 CoronaCards 不支持 store API,因此不具有直接
如果你的应用需要 Windows Phone 8 版 CoronaCards 中不支持的其他功能,则你可以自己用 .NET 来实现这些功能。如需详细了解,请继续阅读 Lua/.NET 通信 指南。
⟨ 指南索引