在iPhone上使用SDL可能會遭遇到的問題
来源:互联网 发布:java构造方法的理解 编辑:程序博客网 时间:2024/05/16 05:08
SDL(Simple DirectMedia Layer)是個開放原始碼的程式庫,主要提供一些開發多媒體應用程式會需要的機制,像是對聲音、影像、鍵盤、搖桿、滑鼠等等的控制機制。它最不可被取代的優點在於跨平台,現在支援的平台多不勝數,Linux、Windows、Windows CE、Mac OSX、FreeBSD之類的平台就不用說了,像SymbianOS這種手機專用的平台,它也都支援。而和本文主旨有關的是,它也支援了愈來愈流行的iPhone。
不過,實際上使用時,我發現了一些問題。
第一個問題是,當你自己在iPhone上寫了一個應用程式,再去link SDL(當然是iPhone版本)時,你會發現它裡頭也有一個main()。倘若你打開SDL的source code,看到video/uikit的SDL_uikitappdelegate.m時,你會發現main()就在這裡頭,而且還註冊了自己的SDLUIKitDelegate。一山不容二虎,你要嘛移除它的main(),不然就得拿掉你自己的。如果你想要移除它的main(),就得解決其他類別和它相依的地方(shareAppDelegate這個class method以及window這個property)。如果你想拿掉你自己的,可以將你自己原有的main()更名為SDL_main()-這是SDLUIKitDelegate會在applicaitonDidFinishLaunching裡去負責呼叫的。無疑的,你接著再把你自己原先寫在applicaitonDidFinishLaunching(ObjC的命名慣例下的名稱通常都不會太短呀XD)裡的程式碼,移到SDL_main()裡,相當於是在進行串接的動作。最後,取消SDLUIKitDelegate之applicaitonDidFinishLaunching裡的exit()動作。
這麼一來,等於是放棄自己的main(),而讓SDL裡頭的UIKit實作來做為應用程式的啟始點。當你這麼做之後,你就可以把自己的AP和SDL整合在一塊執行了。
某種程度來看,這其實是個有點奇怪的設計,做為一個程式庫,讓自己搖身一成了程式的入口了。不過,換個角度來想,它的設計方式,應該是為了便利原先就已經利用SDL開發的程式移植到iPhone上,而不是針對利用UIKit來建構應用程式而設計的。所以,這麼想的話,倒也不會太奇怪了。
iPhone有個天生的限制,他的每個應用程式,都只能有一個視窗,也就是說如果SDL建立主視窗的話,就會是這個視窗。所以,你的AP必須和UIKit共用同一個視窗,你可以透過控制SDLUIKitDelegate的window屬性來存取這個共用的UIWindow物件。
最後,iPhone的UIKit實作裡頭,都假設自己會佔去整個視窗,所以,如果你不希望它佔去整個視窗,而是希望它只是被放在某個位置上,那麼你也會需要修改SDL做點加工,修改一SDL_uikitwindow.m、SDL_uiopengles.m這兩個檔案
转帖:http://www.javaworld.com.tw/roller/qing/entry/%E5%9C%A8iphone%E4%B8%8A%E4%BD%BF%E7%94%A8sdl%E5%8F%AF%E8%83%BD%E6%9C%83%E9%81%AD%E9%81%87%E5%88%B0%E7%9A%84%E5%95%8F%E9%A1%8C
- 在iPhone上使用SDL可能會遭遇到的問題
- 在iPhone上使用SDL可能會遭遇到的問題
- 在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
- 转:SDL在windows mobile上的使用经验
- 在iphone上NSTimer的使用!
- 一个民工在火车上的遭遇
- 在Ubuntu上安装ADT的遭遇
- ----ffmpeg ---sdl在arm上的移植
- SDL在开发板上的移植
- ffmpeg tutorial2学习--使用SDL显示到屏幕上
- 在iPhone上使用OpenCV
- 在iPhone上使用 OpenCV
- 在iPhone上使用 OpenCV
- 在iPhone上使用 OpenCV
- SDL,FFMPEG在iOS平台的使用
- 如何在iPhone应用上跳转到在AppStore上的评论页面
- 在MAC平台上 使用SDL 把SDL窗口加入子窗口中
- 在MAC平台上 使用SDL 把SDL窗口加入子窗口中
- 有关debian7更换gnome3后的问题
- ios 使用UIImagePickerController 打开图片库和相机选择图片修改头像(iphone版本)
- Xcode运行时错误汇总
- OD条件与消息断点的设置方法
- 关于java中返回值的问题void
- 在iPhone上使用SDL可能會遭遇到的問題
- [Leetcode]Best time to buy and sell stock
- interview practice 1 find the second biggest number from a positive array
- [LeetCode] Best time to buy and sell a stock II
- post数据丢失问题 enctype="multipart/form-data"
- 深入理解递归
- [LeetCode] Best Time to Buy and Sell Stock III
- LCOS技术原理
- 2013暑假实习申请和面试