Просмотр полной версии : расположение элементов.
droch_fhoula
08.06.2009, 20:50
есть swf, с параметрами
var myStage:Stage = this.stage;
myStage.scaleMode = StageScaleMode.SHOW_ALL;
myStage.align = StageAlign.TOP_LEFT;
на сцене есть два обьекта которые должны при любом растягивании оставаться по бокам.
проблема в том, что мувик слева прилегает к левому краю и справа мувик прилегает к краю сцены.
но мне нужно чтоб он прилегал к правому краю браузера а не сцены, потому что после конца сцены образуется дыра.
NO_SCALE мне не подходит т. к. при меньшем разрешении экрана половину сайта не видно:(
AlexDesinger
08.06.2009, 21:41
Все дело в том, что вам нужно событие resize класса Stage, которое наступает только при StageScaleMode.NO_SCALE, т.е когда изменяется размер swf файла.
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/index.html
NO_SCALE мне не подходит т. к. при меньшем разрешении экрана половину сайта не видно
Тк для того и используют resize чтобы уместить важные элементы в сцене при любом растягивании swf ролика, а если у вас есть элементы, которые должны не только занимать определенное место но и уменьшаться в размерах, используйте scale для них.
droch_fhoula
08.06.2009, 22:48
простите за глупый вопрос...как задать элементу scale?
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/index.html
свойства scaleX, scaleY
droch_fhoula
08.06.2009, 23:07
когда я задаю свойства scaleX, scaleY ничего не меняется :(
вот код.
var myStage:Stage = this.stage;
myStage.scaleMode = StageScaleMode.NO_SCALE;
myStage.align = StageAlign.TOP_LEFT;
function initialDisplay(event:Event):void {
var swfWidth:int = myStage.stageWidth;
var swfHeight:int = myStage.stageHeight;
var vampYPos:Number = swfHeight - vamp.height;
var logoXPos:Number = swfWidth - logo.width;
vamp.y = vampYPos;
logo.x = logoXPos;
}
addEventListener(Event.ENTER_FRAME, initialDisplay);
stop();
import fl.transitions.Tween;
import fl.transitions.easing.*;
function resizeDisplay(event:Event):void {
vamp.scaleX = 1;
vamp.scaleY = 1;
var swfWidth:int = myStage.stageWidth;
var swfHeight:int = myStage.stageHeight;
var vampYPos:Number = swfHeight - vamp.height;
var logoXPos:Number = swfWidth - logo.width;
var tweenvampY:Tween = new Tween(vamp, "y", Elastic.easeOut, vamp.y, vampYPos, 1.2, true);
var tweenlogoX:Tween = new Tween(logo, "x", Elastic.easeOut, logo.x, logoXPos, 1.2, true);
}
myStage.addEventListener(Event.RESIZE, resizeDisplay);
simplenoize
09.06.2009, 00:43
это оставляй
var myStage:Stage = this.stage;
myStage.scaleMode = StageScaleMode.SHOW_ALL;
myStage.align = StageAlign.TOP_LEFT;
на Resize ставишь что-то вроде этого
var right_mc:MovieClip; // клип, который должен быть справа
var SW:Number = stage.stageWidth; //ширина экрана
right_mc.x = SW - right_mc.width;
Как то так , я думаю.
droch_fhoula
09.06.2009, 01:02
все равно получается что клип болтается только в пределах сцены:(
и остается кусок экрана
simplenoize
09.06.2009, 01:07
А у тебя клип растягивается на 100% ( в html коде) ?......, сделай фон другой у swf и посмотри где у тебя кончается клип.
droch_fhoula
09.06.2009, 01:32
да там 100% прописано
вот исходник под cs3
тут (http://***************/files/242376704/ELVAMPIRO.zip.html)
simplenoize
09.06.2009, 01:54
скорее всего у Вас что-то с кодом в html,.
уберите это и в флэшке все нормально работает:
myStage.scaleMode = StageScaleMode.SHOW_ALL;
droch_fhoula
09.06.2009, 10:39
не, во флэшке тоже не работает.
если уменьшить высоту окна то с боку остается тот же самый пробел :(
Alex Lexcuk
09.06.2009, 12:20
Че-то непонятно, труднее сделать, так что-бы не работало.
package {
import flash.display.*; import flash.events.*; import flash.ui.*; import flash.text.*;import flash.geom.*;
public class DocResize extends Sprite {
private var rMc:Sprite, lMc:Sprite;
public function DocResize():void{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addChild(rMc = new ScaleTestMc);
addChild(lMc = new ScaleTestMc);
resizeHandler();
stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function resizeHandler(evt:Event = null):void{
rMc.x = stage.stageWidth -rMc.width;
}
}
}
где rMc - мувик справа, а lMc мувик слева естественно
При публикации ставим размеры 100%
http://www.murmadillo.tut.su/html/resize.html
Естественно нет причин для не работоспособности этого и что-бы оно не работало надо приложить некоторые усилия, даже не понятно какие.
droch_fhoula
09.06.2009, 12:56
да спасибо это работает. но как я уже писала у меня проблемы с NO_SCALE , потому что мне нужно что если размер окна уменьшается то элементы тоже бы меняли размер. а как задать им такой scale не знаю :(
Alex Lexcuk
09.06.2009, 14:01
Ну так надо скалируемый контент засунуть в отдельный мувик и скалировать его
package {
import flash.display.*; import flash.events.*; import flash.ui.*; import flash.text.*;import flash.geom.*;
public class DocResize extends Sprite {
private var rMc:Sprite, lMc:Sprite, mcGeneralContent:Doc,
baseHeight:Number, baseWidth:Number;
public function DocResize():void{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addChild(mcGeneralContent = new Doc);
addChild(rMc = new ScaleTestMc);
addChild(lMc = new ScaleTestMc);
baseWidth = 550;
baseHeight = 200;
resizeHandler();
stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function resizeHandler(evt:Event = null):void{
var scaleObj:Object=getAutoScale(stage.stageWidth - (rMc.width + lMc.width), stage.stageHeight);
rMc.x = stage.stageWidth -rMc.width;
mcGeneralContent.x = scaleObj.x + lMc.width;
//mcGeneralContent.y = scaleObj.y;//выравнивание по центру
mcGeneralContent.scaleX = mcGeneralContent.scaleY = scaleObj.scale;
}
private function getAutoScale(_w:Number,_h:Number):Object {
//trace("resizeHandler: " + evt);
//trace("stageWidth: " + 800 + " stageHeight: " + 600);
var scaleMode:String;
var scale:Number;
if (baseWidth>=baseHeight) scaleMode = "width";else scaleMode = "height";
if (scaleMode == "width") {
scale = _w/baseWidth;
if (baseHeight*scale>_h) scale = _h/baseHeight;
}else{
scale = _h/baseHeight;
if (baseWidth*scale>_w) scale = _w/baseWidth;
}
//kindSp.scaleX = kindSp.scaleY = scale;
//центровка
var centeroX:Number = Math.abs((_w- baseWidth*scale)/2);
//kindSp.x = centeroX;
var centeroY:Number = Math.abs((_h - baseHeight*scale)/2);
//kindSp.y = centeroY;
return { scale:scale, x:centeroX, y:centeroY };
}
}
}
http://www.murmadillo.tut.su/html/resize-dog.html
droch_fhoula
09.06.2009, 14:29
Alex Lexcuk большое спасибо! очень помог :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.