1

私は Flash Builder 内でビルドしており、約 1 時間前にアクションスクリプトの学習を開始しました。このテーマをすばやく学習するための適切なリソースが見つからないようです。主な目的は、単純なタスクのはずです: これを取得して画像を表示します。画像が正しくロードされているように見え (エンコーディングが明らかになったようです)、正常にコンパイルされますが、firefox にロードすると空白の白い画面が表示されます (Flash が有効になっており、正常に動作しています)。誰でも助けてもらえますか?ここで n00b を完了します。私は Java、c#、c、html、php などの経験が豊富ですが、完全な actionscript/flash n00b.

package
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Bitmap;

    public class images extends Sprite
    {
        public function images()
        {
            drawIcon();
        }
        private var sp:Shape;

        [Embed(source="E:/Documents/Shapemakr/ebayPics/July29_TreeImagesForFBbuilding/IMG_3294.JPG")]
        private var contentIconClass:Class;
        private var contentIcon:Bitmap = new contentIconClass ();

        // ...

        private function drawIcon():void{
            sp.graphics.beginBitmapFill(contentIcon.bitmapData);
            sp.graphics.drawRect(20, 35, 13, 13);
            sp.graphics.endFill();
        }
    }
}

わかりました、これが私の新しいコードです。「映画」に追加する / べき / のようですが、何も見えません。正常にコンパイルされるようです (1600x1200 の画像です。プログラミングの「小さいアイコン」のサイズが関係しているかどうかはわかりません)。

package
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;

    public class images extends MovieClip
    {
        public function images()
        {
            drawIcon();
            //var defaultImage:libraryImages = new libraryImages(469, 60);
            var myImage:Bitmap = contentIcon;
            addChild(myImage);
        }
        private var sp:Shape;

        [Embed(source="E:/Documents/Shapemakr/ebayPics/July29_TreeImagesForFBbuilding/IMG_3294.JPG")]
        private var contentIconClass:Class;
        private var contentIcon:Bitmap = new contentIconClass ();

        private function drawIcon():void{
            sp.graphics.beginBitmapFill(contentIcon.bitmapData);
            sp.graphics.drawRect(20, 35, 13, 13);
            sp.graphics.endFill();
        }
    }
}

編集:ありがとう!drawRect のサイズ パラメータを画像のサイズに変更すると、機能します。あとは、画像を縮小し、URL から読み込んで、URL をクリックできるようにするだけです。私が今理解している基本を少しグーグルで理解できれば、それは実行できるはずです。

新しいコード:

package
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;

    public class images extends MovieClip
    {
        public function images()
        {
            /*
            drawIcon();
            //var defaultImage:libraryImages = new libraryImages(469, 60);
            var myImage:Bitmap = contentIcon;
            addChild(myImage);*/
            sp = new Shape(); //instantiate a new shape
            addChild(sp); //add it to the display so it can be seen
            drawIcon();
        }
        private var sp:Shape;

        [Embed(source="E:/Documents/Shapemakr/ebayPics/July29_TreeImagesForFBbuilding/IMG_3294.JPG")]
        private var contentIconClass:Class;
        private var contentIcon:Bitmap = new contentIconClass ();

        private function drawIcon():void{
            sp.graphics.beginBitmapFill(contentIcon.bitmapData);
            sp.graphics.drawRect(20, 35, 1600, 1200);
            sp.graphics.endFill();
        }
    }
}

編集:うわー、ありがとう!この新しいコードはまさに私が必要とすることを行います。あとは、ローダーを操作してサイズと位置を変更する方法を理解する必要があるだけです。研究/いじりで実行できるはずです、きっと!

package
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.net.*;
    import flash.display.*;

    public class images extends Sprite
    {

        public function images()
        {
            //to load an image, you can use the `Loader` class:
            var loader:Loader = new Loader();
            loader.load(new URLRequest("http://www.shapemakr.com/image/mturk/IMG_3282.JPG"));
            addChild(loader);

            //it's good practice though to listen for COMPLETE, IO ERROR, and SECURITY error events on the loader in case something goes wrong.

            //to listen for a click:
            loader.addEventListener(MouseEvent.CLICK, myClickHandler);
        }

        function myClickHandler(e:Event):void {
            navigateToURL(new URLRequest("http://www.adobe.com"), "_self");//do something, the image was clicked
        }

    }
}

編集:写真を配置して拡大縮小する方法を考え出しました。うわー、この Loader クラスは物事をシンプルにします。ここで、画像のリスト、それらの x/y、および関連する URL を何らかの方法でロードするように微調整する必要があります。(とにかく、そうです、将来的に他の n00b に役立つかもしれないように、すべてのコードをここに置くのは不快です。動作しない不完全な部分的なコードと、その方法を理解できないことほど腹立たしいことはありません。それをよりよく理解する/そこから学ぶために微調整することができるので、動作する例を最初に持つことは学習プロセスに大いに役立ちます。)

package
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.net.*;
    import flash.display.*;

    public class images extends Sprite
    {

        public function images()
        {
            stage.scaleMode=StageScaleMode.NO_SCALE;
            stage.align=StageAlign.TOP_LEFT;
            //to load an image, you can use the `Loader` class:

            var loader:Loader = new Loader();
            loader.x = 50; loader.y=100; loader.scaleX=.3; loader.scaleY=.3;
            //loader.mask = rect;
            loader.load(new URLRequest("http://www.shapemakr.com/image/mturk/IMG_3282.JPG"));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);

            addChild(loader);

            //it's good practice though to listen for COMPLETE, IO ERROR, and SECURITY error events on the loader in case something goes wrong.

            //to listen for a click:
            loader.addEventListener(MouseEvent.CLICK, myClickHandler);
        }

        function myClickHandler(e:Event):void {
            navigateToURL(new URLRequest("http://www.adobe.com"), "_self");//do something, the image was clicked
        }

        private function loaderComplete(e:Event):void {
            // now your image is fully loaded
            trace(e.target.content.width);
            // etc etc, whatever you need to do with your image prior to 
            // addressing it from elsewhere.
        }

    }
}

編集: Img-url とそれに関連付けられた GOTO URL のリストを簡単にロードできる関数を作成しました。また、action-script3 で関数をオーバーロードできないこともわかりました。多少の不便はあると思います。

package
{
    import flash.display.*;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;

    import flashx.textLayout.formats.Float;

    public class images extends Sprite
    {

        public function images()
        {
            stage.scaleMode=StageScaleMode.NO_SCALE;
            stage.align=StageAlign.TOP_LEFT;

            loadClickImage(50,100,"http://www.shapemakr.com/image/mturk/IMG_3282.JPG","http://adobe.com");
            //loadClickScaleImage(50,100,.5,.5,"http://www.shapemakr.com/image/mturk/IMG_3282.JPG","http://adobe.com");
        }

        function loadClickImage(x:int,y:int,imgurl:String,gotourl:String):void 
        {
            loadClickScaleImage(x,y,1,1,imgurl,gotourl);
        }

        function loadClickScaleImage(x:int,y:int,scx:Number,scy:Number,imgurl:String,gotourl:String):void 
        {
            //to load an image, you can use the `Loader` class:
            var loader:Loader = new Loader();
            loader.x = x; loader.y=y; loader.scaleX=scx; loader.scaleY=scy; loader.name = gotourl;
            //loader.mask = rect;
            loader.load(new URLRequest(imgurl));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);

            addChild(loader);

            //to listen for a click:
            loader.addEventListener(MouseEvent.CLICK, myClickHandler);  
        }


        function myClickHandler(e:Event):void {
            navigateToURL(new URLRequest(e.target.name), "_self");//do something, the image was clicked
        }

        function loaderComplete(e:Event):void {
            // now your image is fully loaded
            trace(e.target.content.width);
        }

    }
}

編集: くすくす笑うために、適切なマウス カーソル効果を備えたクリック可能な画像ギャラリーのソース全体を以下に示します。私は気の利いた C# プログラムを作成して、配置と URL (すべての「LoadClickImage()」コード) に適切な AS3 コードを作成し、すべてをすっきりと整理した外観にしました。画像ギャラリーは絶対に素晴らしいです!

package
{
    import flash.display.*;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;
    import flash.ui.MouseCursor;
    import flash.ui.Mouse;

    public class images extends Sprite
    {
        var mouseIsDown:Boolean = false;

        public function images()
        {
            stage.scaleMode=StageScaleMode.NO_SCALE;
            stage.align=StageAlign.TOP_LEFT;

            loadClickImage(0,0,"http://www.shapemakr.com/image/fotor/IMG_3294.JPG","http://adobe.com");
            loadClickImage(260,0,"http://www.shapemakr.com/image/fotor/IMG_3295.JPG","http://adobe.com");
            loadClickImage(520,0,"http://www.shapemakr.com/image/fotor/IMG_3296.JPG","http://adobe.com");
            loadClickImage(0,197,"http://www.shapemakr.com/image/fotor/IMG_3297.JPG","http://adobe.com");
            loadClickImage(260,197,"http://www.shapemakr.com/image/fotor/IMG_3298.JPG","http://adobe.com");
            loadClickImage(520,197,"http://www.shapemakr.com/image/fotor/IMG_3299.JPG","http://adobe.com");
            loadClickImage(0,394,"http://www.shapemakr.com/image/fotor/IMG_3300.JPG","http://adobe.com");
            loadClickImage(260,394,"http://www.shapemakr.com/image/fotor/IMG_3301.JPG","http://adobe.com");
            loadClickImage(520,394,"http://www.shapemakr.com/image/fotor/IMG_3302.JPG","http://adobe.com");
            loadClickImage(0,591,"http://www.shapemakr.com/image/fotor/IMG_3303.JPG","http://adobe.com");
            loadClickImage(260,591,"http://www.shapemakr.com/image/fotor/IMG_3304.JPG","http://adobe.com");
            loadClickImage(520,591,"http://www.shapemakr.com/image/fotor/IMG_3305.JPG","http://adobe.com");
            loadClickImage(0,788,"http://www.shapemakr.com/image/fotor/IMG_3306.JPG","http://adobe.com");
        }

        function loadClickImage(x:int,y:int,imgurl:String,gotourl:String):void 
        {
            loadClickScaleImage(x,y,1,1,imgurl,gotourl);
        }

        function loadClickScaleImage(x:int,y:int,scx:Number,scy:Number,imgurl:String,gotourl:String):void 
        {
            //to load an image, you can use the `Loader` class:
            var loader:Loader = new Loader();
            loader.x = x; loader.y=y; loader.scaleX=scx; loader.scaleY=scy; loader.name = gotourl;
            //loader.mask = rect;
            loader.load(new URLRequest(imgurl));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);

            addChild(loader);

            //to listen for a click:
            loader.addEventListener(MouseEvent.CLICK, myClickHandler);  
            loader.addEventListener(MouseEvent.MOUSE_OVER, changeCursor);
            loader.addEventListener(MouseEvent.MOUSE_OUT, resetCursor);
        }


        function myClickHandler(e:Event):void {
            navigateToURL(new URLRequest(e.target.name), "_self");//do something, the image was clicked
            //Mouse.cursor = MouseCursor.
        }

        private function changeCursor(e:MouseEvent)
        {
            Mouse.cursor = MouseCursor.BUTTON;
        }

        private function resetCursor(e:MouseEvent)
        {   
            Mouse.cursor = MouseCursor.ARROW;
        }

        function loaderComplete(e:Event):void {
            // now your image is fully loaded
        //  trace(e.target.content.width);
        }

    }
}

編集: マウス オーバー時にアルファ シェーディングを追加しました。

package
{
    import flash.display.*;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;
    import flash.ui.MouseCursor;
    import flash.ui.Mouse;

    public class images extends Sprite
    {
        var mouseIsDown:Boolean = false;

        public function images()
        {
            stage.scaleMode=StageScaleMode.NO_SCALE;
            stage.align=StageAlign.TOP_LEFT;

            loadClickImage(0,0,"http://www.shapemakr.com/image/fotor/IMG_3294.JPG","http://adobe.com");
            loadClickImage(260,0,"http://www.shapemakr.com/image/fotor/IMG_3295.JPG","http://adobe.com");
            loadClickImage(520,0,"http://www.shapemakr.com/image/fotor/IMG_3296.JPG","http://adobe.com");
            loadClickImage(0,197,"http://www.shapemakr.com/image/fotor/IMG_3297.JPG","http://adobe.com");
            loadClickImage(260,197,"http://www.shapemakr.com/image/fotor/IMG_3298.JPG","http://adobe.com");
            loadClickImage(520,197,"http://www.shapemakr.com/image/fotor/IMG_3299.JPG","http://adobe.com");
            loadClickImage(0,394,"http://www.shapemakr.com/image/fotor/IMG_3300.JPG","http://adobe.com");
            loadClickImage(260,394,"http://www.shapemakr.com/image/fotor/IMG_3301.JPG","http://adobe.com");
            loadClickImage(520,394,"http://www.shapemakr.com/image/fotor/IMG_3302.JPG","http://adobe.com");
            loadClickImage(0,591,"http://www.shapemakr.com/image/fotor/IMG_3303.JPG","http://adobe.com");
            loadClickImage(260,591,"http://www.shapemakr.com/image/fotor/IMG_3304.JPG","http://adobe.com");
            loadClickImage(520,591,"http://www.shapemakr.com/image/fotor/IMG_3305.JPG","http://adobe.com");
            loadClickImage(0,788,"http://www.shapemakr.com/image/fotor/IMG_3306.JPG","http://adobe.com");
        }

        function loadClickImage(x:int,y:int,imgurl:String,gotourl:String):void 
        {
            loadClickScaleImage(x,y,1,1,imgurl,gotourl);
        }

        function loadClickScaleImage(x:int,y:int,scx:Number,scy:Number,imgurl:String,gotourl:String):void 
        {
            //to load an image, you can use the `Loader` class:
            var loader:Loader = new Loader();
            loader.x = x; loader.y=y; loader.scaleX=scx; loader.scaleY=scy; loader.name = gotourl;
            //loader.mask = rect;
            loader.load(new URLRequest(imgurl));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);

            addChild(loader);

            //to listen for a click:
            loader.addEventListener(MouseEvent.CLICK, myClickHandler);  
            loader.addEventListener(MouseEvent.MOUSE_OVER, changeCursor);
            loader.addEventListener(MouseEvent.MOUSE_OUT, resetCursor);
        }


        function myClickHandler(e:Event):void {
            navigateToURL(new URLRequest(e.target.name), "_self");//do something, the image was clicked
            //Mouse.cursor = MouseCursor.
        }

        private function changeCursor(e:Event)
        {
            (e.target as Loader).alpha=.85;
            Mouse.cursor = MouseCursor.BUTTON;
        }

        private function resetCursor(e:Event)
        {   
            (e.target as Loader).alpha=1;
            Mouse.cursor = MouseCursor.ARROW;
        }

        function loaderComplete(e:Event):void {
            // now your image is fully loaded
        //  trace(e.target.content.width);
        }

    }
}
4

2 に答える 2

0

2 つの問題:

  1. シェイプをインスタンス化していません。C#/Java の経験があれば、そのプロセスはよく知っているはずです。

  2. シェイプに描画しますが、ディスプレイには表示されないため、何も表示されません。Flash では、画面に何かを明示的に追加する必要があります。したがって、これが機能するには、次のことを行う必要があります。

    public function images()
    {
        sp = new Shape(); //instantiate a new shape
        addChild(sp); //add it to the display so it can be seen
    
        drawIcon();
    }
    

あなたが行った他のすべては良さそうです。ただし、ビットマップの描画をそのようにスケーリングするつもりはないことに注意してください。

おそらく、形状を忘れて、ビットマップを直接操作する方が良いでしょう:

    public function images()
    {
        addChild(contentIcon); //add it to the display so it can be seen
        contentIcon.width = 200; //or whatever you want the width to be
        contentIcon.scaleY = contentIcon.scaleX; //make the aspect ratio match
        //to load an image, you can use the `Loader` class:
        var loader:Loader = new Loader();
        loader.load(new URLRequest("http://someplace.com/myImage.jpg"));
        addChild(loader);

        //it's good practice though to listen for COMPLETE, IO ERROR, and SECURITY error events on the loader in case something goes wrong.

       //to listen for a click:
       loader.addEventListener(MouseEvent.CLICK, myClickHandler);
    }

    function myClickHandler(e:Event):void {
        //do something, the image was clicked
    }
于 2015-07-30T05:51:43.003 に答える
-1

私の知る限り、addChild を介してステージに追加できるようにするには、その画像をムービークリップに入れる必要があります。

現時点では「ライブラリ」にありますが、ステージには呼び出していません。

于 2015-07-30T05:28:21.950 に答える