2010-11-01 19 views
2

Editer # 2 J'ai trouvé la solution, c'était plus simple que j'aurais pu l'espérer. Merci pour votre temps. =) (A répondu à ma propre question avec la solution complète)AS3: Redimensionner un sprite sans redimensionner son BitmapFill (ou son contenu d'ailleurs)?

Editer: Mes excuses que mon poste n'était pas assez transparent .. Je vais essayer de itérer pour un peu plus de clarté. Je ne cherche pas simplement à contenir des choses et à redimensionner le conteneur sans redimensionner le contenu. Je voudrais juste utiliser un MovieClip simple pour cela .. Mon principal objectif est l'utilisation de BitmapFill. J'essaye de faire une image de fond répétitive pour un récipient; jusqu'à présent, je suis capable de dessiner mon sprite BitmapFill à la taille que je veux. (Quelle est la hauteur de la scène), mais quand la scène est redimensionnée, je veux redimensionner mon conteneur, mais avoir mes conteneurs BitmapFill recadrer ou ajouter plus que la fenêtre est redimensionnée plus ou moins. Permettez-moi d'illustrer ce que je veux dire:

alt text

J'espère que cela efface toute confusion et aide à des réponses plus droites.

------- Original post:

J'ai simple sprite rectangle qui se remplit d'une image bitmap de la bibliothèque et un simple redimensionnement fonction de gestionnaire qui détecte lorsque la fenêtre a été redimensionnée . Ce que je voudrais faire est de faire redimensionner mon rectangle à la hauteur du stage.stageHeight en conservant son remplissage bitmap, mais ne pas redimensionner le remplissage bitmap ou des enfants dans l'image-objet. D'après ce que j'ai lu, c'est un peu délicat parce que le sprite se redimensionne par rapport à ce qu'il contient .. ou .. quelque chose comme ça .. Je ne sais vraiment plus ... J'ai vu un exemple où une personne a étendu la classe de sprite, mais je ne sais pas pourquoi ou comment ..

dans ma bibliothèque il y a une image appelée « pattern » et mon code ressemble à ceci:

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true); 

var bgData:pattern = new pattern(0,0); 
var bg:Sprite = new Sprite(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 
bg.graphics.endFill(); 
addChild(bg); 

function resizeHandler(e:Event=null):void 
{ 
trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight); 
bg.height = stage.stageHeight; //simply makes the fill resize also 
} 

Répondre

2

Oh, eh bien, je suis terne. La réponse était assez simple.

Tout ce que je devais faire était clair que les graphiques puis les redessiner ..

Je ne savais pas du clair(); fonction ..

le code complet révisé est le suivant:

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true); 

var bgData:pattern = new pattern(0,0); 
var bg:Sprite = new Sprite(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 
bg.graphics.endFill(); 
addChild(bg); 

function resizeHandler(e:Event=null):void 
{ 
trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight); 
bg.graphics.clear(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 

bg.graphics.endFill(); 
} 

remercie tous, désolé pour ces déchets potentiels de l'espace.

+0

+1 entré dans ce post pour écrire exactement la même chose :) – www0z0k

1

Depuis un sprite redimensionnera à son contenu, vous pouvez utiliser une forme pour redimensionner votre Sprite. Changer la taille de la forme redimensionnera efficacement le Sprite sans redimensionner les autres enfants du Sprite.

 

var bg:Sprite = new Sprite(); 
addChild(bg); 

var fill:Shape = new Shape(); 
//you can make the fill transparent 
with(fill) 
{ 
    graphics.beginFill(0 , 0); 
    graphics.drawRect(0 , 0 , anyWidth , anhyHeight); 
    graphics.endFill(); 
} 
bg.addChild(fill); 

//then add the fill that you want visible 
var bgFill:Sprite = new Sprite(); 
//add the graphics here 
bg.addChild(bgFill); 


function resizeSprite(event:Event):void 
{ 
    // bgFill will not be resized 
    fill.width = stage.stageWidth; 
    fill.height = stage.stageHeight; 
} 

+0

Merci pour votre réponse rapide, j'apprécie l'effort que vous avez pris pour écrire cette réponse, mais après avoir inspecté et joué avec votre code, il semble que vous utilisiez simplement un sprite comme conteneur pour un autre sprite. c'est une sorte de vaincre le but de mon problème car je suis parfaitement au courant de cette méthode de confinement.J'ai mis à jour mon message pour être aussi clair que possible, j'espère que vous pouvez m'aider avec cette question révisée =) ~ PtK – Partack

+0

Pas de problème, j'ai vraiment raté le BitmapFill :(J'ai tendance à lire trop vite! En tout cas, félicitations pour votre réponse, même si on peut aider beaucoup, je pense qu'il est toujours plus gratifiant de trouver la réponse vous-même :) – PatrickS