Внедрение и чтение ресурсов изображений при развертывании в Windows

На других платформах я мог бы просто использовать что-то вроде [Embed(source="logo.gif")] или @:bitmap, но, похоже, для Windows/других платформ Cpp такой возможности нет.

Я пытался использовать библиотеку EmbedAssets, но она устарела.

Я также пытался использовать тег ресурса файла nmml. С этим я мог бы получить изображение как haxe.sys.io.Bytes, но для использования мне нужно преобразовать haxe.sys.io.Bytes в nme.utils.ByteArray. Я не нашел способ сделать это.

Итак, что я могу сделать для встраивания образов в проект haxe/nme при развертывании в Windows?


person José Carlos Candido    schedule 13.06.2013    source источник


Ответы (2)


Помимо openfl.Assets, OpenFL поддерживает встроенные теги @:bitmap, @:sound, @:font и @:file.

Для первого требуется <assets path="to/assets" /> в XML-файле вашего проекта, а в Windows файлы будут скопированы вместе с вашим исполняемым файлом.

Теги внедрения требуют, чтобы ваши файлы ресурсов находились в исходном пути в зависимости от способа их внедрения, поэтому используйте <source path="to/assets" /> в файле проекта.

Вот пример использования тега @:bitmap:

package;


import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;

@:bitmap("nme.png") class Image extends BitmapData {}


class Main extends Sprite {


    public function new () {

        super ();

        var bitmap = new Bitmap (new Image (0, 0));
        addChild (bitmap);

        bitmap.x = (stage.stageWidth - bitmap.width) / 2;
        bitmap.y = (stage.stageHeight - bitmap.height) / 2;

    }


}

Используя встроенные теги, актив будет внутри вашего исполняемого файла.

person Joshua Granick    schedule 14.06.2013
comment
Спасибо! Для этого я перешел с NME на OpenFL и очень доволен результатом. Еще одна небольшая заметка: как отключить функцию Alt+Enter? - person José Carlos Candido; 15.06.2013
comment
Как мне использовать @:file для встраивания библиотеки swf? не могли бы вы добавить пример к своему ответу выше? благодарю вас - person simo; 09.02.2014

С NME или OpenFL вы должны просто иметь возможность вызывать Assets.getBitmapData("assets/myImg.png"); без необходимости добавлять ресурсы в файл NMML (хотя вам может потребоваться добавить <assets path="Assets" rename="assets"/> или переименовать каталог ресурсов). Затем вы сможете добавить эти данные bitmapData в растровый объект в списке отображения.

Например:

var bd:BitmapData = Assets.getBitmapData("assets/myImg.png");
var bitmap:Bitmap = new Bitmap(bd);
addChild(bitmap);
person jayrobin    schedule 13.06.2013
comment
Я сделал это, и файлы все еще копируются вместе с исполняемым файлом. - person José Carlos Candido; 14.06.2013