Para la mayoría de las plataformas, puede escribir subsistemas que se abstraen de las API específicas utilizadas para llamar y recuperar información de la plataforma en la que se está ejecutando. Las API de E / S suelen ser las más fáciles de abstraer: todos los sistemas de archivos funcionan con algunas suposiciones bastante básicas sobre abrir, cerrar y leer archivos, incluso cuando se tienen en cuenta las llamadas asincrónicas. Luego tiene sus sistemas principales, como leer la entrada del controlador, consultar el tiempo, acceder a la memoria y las primitivas de subprocesos, la mayoría de los cuales funcionan de la misma manera.
Incluso los gráficos pueden abstraerse en gran medida, y de hecho en la mayoría de los buenos motores lo son. Pero tiene que empaquetar las cosas 'renderizables' en cajas negras donde no se le permite saber qué sucede dentro de ellas. Usted sabe que tiene una 'cosa' que representa en una posición particular en el mundo. No sabes cómo se representa, solo que es así. Y la capa de abstracción de gráficos se encarga de todos los detalles para obtenerla en pantalla. Los canales de compilación específicos de la plataforma empaquetan los datos gráficos de tal manera que puedan ser referenciados desde el motor sin saber realmente cómo se representan internamente.
Todo lo dicho, sin embargo, cuando se trata de enviar un juego, hay ciertas partes que simplemente no puedes abstraer. Sería ridículo pensar que podría enviar el mismo código en iPhone que lo haría en 360 o PS3, ya que los mecanismos de entrada, la forma fundamental de operar y las capacidades de la plataforma son demasiado diferentes. Podría crear un título del tamaño de un iPhone en 360, pero tendría que limitar sus mecanismos de entrada solo a aquellos que el 360 puede admitir. Entonces, un cursor virtual en pantalla simulando un dedo, y posiblemente usando el joystick donde se usa la entrada del acelerómetro 3D.
De manera más sensata, partes del juego se pueden escribir de una manera reutilizable, y los módulos de código individuales se pueden portar entre plataformas, a pesar de que la mayoría del título es diferente. Por ejemplo, si tiene una máquina de estado AI, eso realmente no le importa si se ejecuta en 360, PC o iPhone. Su juego usará muchos de esos componentes, y siempre que hayan sido diseñados correctamente para que tomen entradas y salidas bien definidas, entonces el resto del juego puede envolverse alrededor de ellos, independientemente de la plataforma, y evitar tener que reescribirlos. componentes.
Esa reutilización es la clave para un desarrollo multiplataforma, no busca un motor de talla única que funcione en todas las plataformas. Incluso si tal cosa existiera, sería tan lisiado tener que trabajar en el mínimo común denominador, no sería muy útil hacer juegos con él.