El emulador de reproductor de flash de volantes en iOS
Trabajo en progreso.
Ver Ruffle.rs para una introducción general.
Opciones de diseño
Una persona normal podría haber envuelto el óxido en algunos extern "C" fn , y luego usado Swiftui, o al menos Objective-C para la capa de UI. Probablemente recomendaría que para la mayoría de los casos de uso.
Sin embargo, estoy desarrollando objc2 , y quiero mejorar la interfaz de usuario de eso, así que decidí ser un poco untodoxo y hacer todo en óxido.
Pruebas
Ejecute el reproductor central en Mac Catalyst con:
cargo bundle --target=aarch64-apple-ios-macabi --bin run_swf && ./target/aarch64-apple-ios-macabi/debug/bundle/ios/Ruffle.app/run_swf
Ui
Similar a https://getutm.app/, deberíamos tener:
- Una biblioteca de SWF/Bundles/enlaces guardados "instalados", editable.
- Al seleccionar un SWF, la barra de navegación en la parte superior muestra varias opciones
- Apertura del teclado (¿tal vez?)
- Menú contextual "Jugar, rebobinar, avanzar, atrás, etc."?
- Permitir cambiar entre escala
- Botón de retroceso para volver a la biblioteca
- "Agregar" y "editar" son dos flujos diferentes, y deberían mostrar dos UI diferentes
- "Agregar" no tiene que mostrar todas las configuraciones adicionales; Se trata solo de obtener el archivo. El usuario puede editarlo más tarde.
Configuración del elemento de la biblioteca
Las configuraciones se almacenan por paquete de volantes.
-
PlayerOptions- https://github.com/ruffle-rs/ruffle/blob/master/frontend-utils/src/bundle/readme.md#player
- Entradas:
- Configurable
- ¿Deslizar las llaves de flecha?
- https://openemu.org/ ¿Está bastante bien, equivalente para iOS?
- ¿Nombre personalizado?
- ¿Imagen personalizada?
Ideas de almacenamiento
Objetivos:
- Almacene un paquete de volantes.
- Almacenar configuraciones de usuario.
- Datos de almacenamiento El SWF en sí puede haber almacenado (el almacén de valores clave).
- Sincronización con iCloud.
- Estar al revés y hacia adelante compatible con nuevas versiones de la aplicación Ruffle.
- Confirmado por paquetes de volantes.
Entonces, queremos admitir varios modos de lanzamiento:
- Importar paquete de forma permanente.
- Abra un paquete de volantes sin importar.
- ¿Qué sucede cuando un paquete se ha movido en relación con la configuración del usuario?
Los paquetes, cuando se importan, se desempaquetan desde Zip, se renombran a bundle.ruf y se mudan a library/$random_uuid/ , para no entrar en conflicto con otros paquetes con el mismo nombre. Los SWF importados se convierten en un paquete de volantes con name = "file_stem", url = "file:///file_stem.swf" . Los archivos se almacenan en el disco en el directorio de la aplicación. La configuración del usuario se almacena en settings.toml junto a bundle.ruf . Datos de aplicación en app_data/ .
La regla para la sincronización es "victorias más nuevas". Esto debería estar bien si por ejemplo, el usuario ha modificado su configuración en dos dispositivos diferentes, aunque podría requerir una lógica diferente para los datos de la aplicación.
Tenga en cuenta que podríamos haber usado un modelo de datos básicos, pero eso es difícil y realmente no nos ayudará cuando nuestra configuración está definida principalmente por el paquete de volantes.
Terminología
¿Cómo llamamos un SWF? "Juego"? "Película"? "SWF"? "Animación flash"?
Plan
- Obtenga la interfaz de usuario de volante en un
UIView - Conectar de alguna manera para comenzar con un SWF en el dispositivo local
HACER
- Establezca
idleTimerDisabled en el momento apropiado - Use blanco para etiquetas, naranja para botones
- Botón Agregar configuración en el elemento de la biblioteca
Opción
- Use intencionalmente
public.app-category.games para obtener un mejor rendimiento ("modo de juego" en macOS).- Esta no es necesariamente la opción correcta para el volante, pero es la más cercana.
- No tiene sentido tener configuraciones de raíz como en la versión de escritorio
- No hay barra de pestaña, no deseada realmente, ya que generalmente queremos que la interfaz de usuario de SWF llene la mayor parte de la pantalla
- Aunque si decidimos agregar una manera fácil de descargar de fuentes "confiables", podríamos agregar una barra de pestaña para eso
- Aunque una barra de navegación es útil
- Para mostrar algunas configuraciones para el SWF actual
- Para volver a la biblioteca
- ¿Ocultar al ingresar a la pantalla completa?