Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [AS3] Pattern di fondo

  1. #1
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    Mi inserisco in questa discussione perché credo sia quella giusta. Ho la necessità di usare un'immagine caricata tramite loadClip come pattern di sfondo.

    Questo il mio script in AS3 funzionante:
    package {
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.system.Capabilities;

    public class Pattern extends Sprite {

    private var url:String = "pattern.jpg";
    private var loader:Loader = new Loader();

    public function Pattern() {

    var request:URLRequest = new URLRequest(url);

    loader.load(request);
    loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, drawImage);
    }

    private function drawImage(event:Event):void {

    var mySprite:Sprite = new Sprite();

    var resX:Number = Capabilities.screenResolutionX;
    var resY:Number = Capabilities.screenResolutionY;

    var myBitmap:BitmapData = new BitmapData(loader.width, loader.height, false);
    myBitmap.draw(loader, new Matrix());

    var matrix:Matrix = new Matrix();

    mySprite.graphics.beginBitmapFill(myBitmap, matrix, true);
    mySprite.graphics.drawRect(0, 0, resX, resY);
    mySprite.graphics.endFill();

    addChild(mySprite);
    }
    }
    }

    Dovrei realizzarlo in AS2 perché il sito dove lo devo inserire è in Flash8. Non posso usare wmode=transparent e nemmeno importare un'immagine e usarla dalla librearia.
    "Possono recidere tutti i fiori, la Primavera arriverà"

  2. #2
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    Tempo fa avevo smanettato un po' e ho creato una stupida funzione:
    Pattern
    function patterns(_scope:MovieClip) {

    var _l:Number = _scope._width;
    var _a:Number = _scope._height;
    var _r:Number = int(System.capabilities.screenResolutionX / _l) + 1;
    var _c:Number = int(System.capabilities.screenResolutionY / _a) + 1;

    var _i:Number = 0;
    var _j:Number = -1;
    var _k:Number = 0;

    while (_i < (_r * _c)) {
    var _mc:MovieClip = _base.createEmptyMovieClip("_pattern"+ _i, _base.getNextHighestDepth())

    if(_k % _r == 0) {
    _j++;
    _k = 0;
    }

    _mc._x = _k * _l;
    _mc._y = _j * _a;

    var _visuals = new flash.display.BitmapData(_scope._width, _scope._height);
    _visuals.draw(_scope);
    _mc.attachBitmap(_visuals, _mc.getNextHighestDepth());

    _k++;
    _i++;
    }
    }

    Questa funzione ha un bug se le immagini sono molto piccole (20x20): mi viene detto di interrompere lo script perché sta rallentando il filmato. E ha ragione!!!! Su un monitor 1440x900 vengono creati circa 100.000 movie clip se l'immagine è molto piccola (nel mio caso 96.000)
    "Possono recidere tutti i fiori, la Primavera arriverà"

  3. #3
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    _scope è l'immagine jpg che ho caricato con loadClip
    "Possono recidere tutti i fiori, la Primavera arriverà"

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ho separato le discussioni perchè quella era abbastanza vecchia, inoltre ho aggiunto al titolo il prefisso per il codice trattandosi di AS3

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    comunque in flash 8 è molto più semplice gestire le tessere di uno sfondo, grazie alla classe BitmapData che aggiunge ai drawing methods la possibilità di effettuare un riempimento con un pattern
    l'unica cosa a cui devi badare è che la tessera sarà fruibile come pattern solo dopo essere stata caricata completamente dall'esterno

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    intanto questa è la funzioncina da usare per creare lo sfondo dentro un clip vuoto

    Codice PHP:
    function drawBackground(m:MovieClipp:BitmapData) {
        var 
    cx System.capabilities.screenResolutionX;
        var 
    cy System.capabilities.screenResolutionY;
        
    with (m) {
            
    beginBitmapFill(p);
            
    moveTo(0,0);
            
    lineTo(cx,0);
            
    lineTo(cx,cy);
            
    lineTo(0,cy);
            
    lineTo(0,0);
            
    endFill();
        }


  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ecco qui, implementato con il caricamento esterno, testato e funzionante

    Codice PHP:
    import flash.display.BitmapData;
    Stage.align "TL";
    Stage.scaleMode "noScale";
    Stage.showMenu false;
    function 
    drawBackground (target:MovieCliplink:String):MovieClip {
        var 
    background:MovieClip target.createEmptyMovieClip("background"target.getNextHighestDepth());
        var 
    temp:MovieClip target.createEmptyMovieClip("temp"target.getNextHighestDepth());
        var 
    loader:Object = new MovieClipLoader();
        
    loader.onLoadInit = function (target_mc:MovieClip) {
            var 
    bd:BitmapData = new BitmapData(target_mc._widthtarget_mc._height);
            
    bd.draw(target_mc);
            
    temp.removeMovieClip();
            var 
    cx System.capabilities.screenResolutionX;
            var 
    cy System.capabilities.screenResolutionY;
            
    background.beginBitmapFill(bd);
            
    background.moveTo(0,0);
            
    background.lineTo(cx,0);
            
    background.lineTo(cx,cy);
            
    background.lineTo(0,cy);
            
    background.lineTo(0,0);
            
    background.endFill();
        }
        
    loader.loadClip(linktemp);
        return 
    background;
    }
    drawBackground(this"pattern.gif"); 

  8. #8
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    Grazie mille, gentilissimo. Ora lo testo.
    "Possono recidere tutti i fiori, la Primavera arriverà"

  9. #9
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    Funziona, grazie. Unico piccolo fastidio: il mio sito risiede sul dominio A mentre il pattern sta su http://patterns.kreativo.s3.amazonaw...1original.gif. Quando faccio loadClip nelle attività di Safari vedo che il file è caricato ma il pattern non viene creato. Devo creare un allowDomain? Scusa il disturbo..
    "Possono recidere tutti i fiori, la Primavera arriverà"

  10. #10
    Utente di HTML.it L'avatar di piaza
    Registrato dal
    Oct 2003
    Messaggi
    131
    "Possono recidere tutti i fiori, la Primavera arriverà"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.