سؤال

لديّ حوالي 90 صورة أحتاج إلى تضمينها في البرنامج النصي (الإصدار 3). الطريقة الوحيدة التي يمكنني اكتشافها هي كتابة الكود التالي 90 مرة لكل صورة.

[Embed(source="images/door0091.bmp")]
    private var Door1:Class;
    var door1:Bitmap = new Door1();

إنه لأمر مؤلم حقًا كتابته عدة مرات. أود أن أعرف ما إذا كان هناك أي طريقة للقيام بذلك برمجيًا؟

لا يمكنني استخدام طريقة المحمل حيث يجب أن تكون الصور موجودة مع ملف SWF. أريد أن تكون SWF مستقلة بمجرد تجميعها. الرجاء المساعدة !!!

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

إذا كنت على Windows ، فيمكنك استخدام برنامج نصي دفعي لإنشاء الملف الذي يحتوي على رمز التضمين (أو إنشاء جزء منه ولصقه يدويًا في ملف آخر).

الدُفعة قبيحة ، ولكن بالنسبة للمهام البسيطة ، فإنها قابلة للاستخدام تقريبًا. انسخ الكود التالي في ملف جديد وقم بتسمية ما تريد (استخدم. بات كملحق له). ضع هذا البرنامج النصي في مجلد الصور الخاص بك وقم بتشغيله (انقر نقرًا مزدوجًا عليه). يجب أن ينشئ ملف images.as باستخدام رمز ActionScript الذي تم إنشاؤه لكل صورة تنتهي في .jpg (يمكنك تغيير البرنامج النصي لاستخدام ملحقات أخرى).

@echo off
set out_file=images.as
echo     // script generated file > %out_file%
for /f %%a IN ('dir /b *.jpg') do (
    echo     [Embed^(source="images/%%a"^)] >> %out_file%
    echo     private var %%~na_class:Class; >> %out_file%
    echo     private var %%~na:Bitmap = new %%~na_class^(^); >> %out_file%
)

هذا أساسي تمامًا ولن يعمل بشكل جيد إذا كان اسم ملفاتك يحتوي على أحرف "غريبة" مثل الفضاء. لكن على خلاف ذلك ، يمكن أن يفعل الرفع الثقيل ، على ما أعتقد.

نصائح أخرى

هناك طريقة - إذا كنت تريد استخدام ملف zip. يمكنك تضمين ملف zip بالكامل الذي يحتوي على جميع الصور في التطبيق الخاص بك. ثم ، افتح ملف zip في وقت التشغيل لاسترداد الصور التي تحتاجها. يمكنك كتابة zip letil الخاصة بك ، أو ، كما هو موضح أدناه ، ما عليك سوى استخدام واحدة مجانية من Nochump:

عند الاتصال بوظيفة zip.getInput () ، عند استخراج محتويات إدخال zip الفردية ، لذا استخدم تلك المكالمة فقط عندما تكون مستعدًا لسحب ملف معين.

إليك تطبيق تجريبي كامل:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import nochump.util.zip.ZipEntry;
            import nochump.util.zip.ZipFile;

            [Embed(source="images.zip",mimeType="application/octet-stream")]
            private var imagesZip:Class;

            protected function init():void
            {
                var theImages:Object = new imagesZip();

                var zip:ZipFile = new ZipFile(theImages as IDataInput);
                for each(var entry:ZipEntry in zip.entries)
                {
                    var fileName:String = entry.name.toLowerCase();
                    if(fileName == "image2.jpg")
                    {
                        var loader:Loader = new Loader();
                        this.rawChildren.addChild(loader);
                        loader.loadBytes(zip.getInput(entry));
                    }
                }
            }
        ]]>
    </mx:Script>
</mx:Application>

اتمنى ان يساعدك هذا للخروج!

التضمين هو شيء ما في وقت الترجمة لا يمكنك القيام بذلك برمجيًا.

التفكير الوحيد الذي يمكنك فعله هو الاستخدام طريق وتوليدها في صفيف. أو إذا كنت ترضي التضمين ، فأنا أتفق مع خدعة خوان بابلو كليفانو أو عادةً باستخدام مولد الرمز مثل Code Smith وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top