ScrollPane définir la position de défilement
Je ne peux pas contrôler le défilement d'un composant scrollpane de l'intérieur de mon actionscript (je suis à l'aide d'actionscript 3.0)
Voici ma Définition:
var scrollPane:ScrollPane = new ScrollPane();
scrollPane.verticalScrollPolicy = "false";
scrollPane.move(374, 0);
scrollPane.setSize(476, 370);
Lorsque je tente de régler elle - composant scrollPane.horizontalScrollPosition = 500; j'obtiens l'erreur suivante
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::ScrollPane/setScrollDrag()
at fl.containers::ScrollPane/draw()
at fl.core::UIComponent/drawNow()
at fl.containers::BaseScrollPane/set horizontalScrollPosition()
at Program()
at Preloader/main()
at Preloader/enterFrameHandler()
Même composant scrollPane.horizontalScrollPosition = scrollPane.horizontalScrollPosition jette la même erreur.
Cependant trace(composant scrollPane.horizontalScrollPosition); fonctionne très bien.
J'ai essayé hPosition aussi et il ne fonctionne pas du tout. Tout d'indices quant à la façon dont je peux contrôler la position de défilement serait grandement apprécié.
Ci-dessous l'intégralité du code
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.containers.ScrollPane;
public class Program extends Sprite {
public function Program() {
//define variable
var startX:Number;
var startY:Number;
var counter:Number = 0;
const LIMIT:Number = 100;
var intMessages:Number = 80;
var intBoardSize:Number = 476*(Math.round(intMessages/15)+1);
var intMessageMinX:Number = 35;
var intMessageMaxX:Number = intBoardSize-99;
var intMessageMinY:Number = 35;
var intMessageMaxY:Number = 310;
var activeGloveName:String = ""
var intDegreeHigh:Number = 45;
var intDegreeLow:Number = -45;
//create objects
var mcglove:mcGlove = new mcGlove();
var mcglovetarget:mcGloveTarget = new mcGloveTarget();
var myDropShadowFilterSmall = new DropShadowFilter (2,45,0x000000,0.65,3,3,2,3,false,false,false);
var myDropShadowFilterDown = new DropShadowFilter (3,45,0x000000,0.65,5,5,2,3,false,false,false);
var myDropShadowFilterUp = new DropShadowFilter (5,45,0x000000,0.65,7,7,2,3,false,false,false);
var topShadow = new DropShadowFilter (3,90,0x000000,0.35,8,8,2,3,false,false,false);
var holder:MovieClip = new MovieClip();
var pinkline:Sprite = new Sprite();
var searchBox:Sprite = new Sprite();
var topShadowBox:Sprite = new Sprite();
var aMessages:Array = new Array();
//Create a glove for each message
for (var x = 0; x < intMessages; x++){
aMessages[x] = new mcGlove();
aMessages[x].scaleX = .28;
aMessages[x].scaleY = .28;
counter = 0;
position(aMessages[x]);
aMessages[x].rotation = (0, 0, 0, Math.round(Math.random() * (intDegreeHigh - intDegreeLow)) + intDegreeLow);
aMessages[x].filters = [myDropShadowFilterSmall];
holder.addChild(aMessages[x]);
aMessages[x].name = "glove" + x;
aMessages[x].addEventListener(MouseEvent.MOUSE_DOWN, selectMessage);
aMessages[x].addEventListener(MouseEvent.MOUSE_UP, releaseMessage);
aMessages[x].buttonMode = true;
}
var scrollPane:ScrollPane = new ScrollPane();
scrollPane.verticalScrollPolicy = "false";
scrollPane.move(374, 0);
scrollPane.setSize(476, 370);
scrollPane.horizontalLineScrollSize = 120;
topShadowBox.graphics.beginFill(0x333333);
topShadowBox.graphics.drawRect(0,0,870,5);
topShadowBox.x = -10;
topShadowBox.y = -5;
topShadowBox.filters = [topShadow];
pinkline.graphics.beginFill(0xDB9195);
pinkline.graphics.drawRect(0,0,476,2);
pinkline.x = 374;
pinkline.y = 353;
searchBox.graphics.beginFill(0xDB9195);
searchBox.graphics.drawRect(0,0,476,25);
searchBox.x = 374;
searchBox.y = 370;
//add to frame
sortObjects();
scrollPane.source = holder;
scrollPane.horizontalScrollPosition = 5;
//create instance names for referancing/compairing objects
mcglove.name = "mcglove";
mcglovetarget.name = "mcglovetarget";
//position the glove and modify apperiance
mcglove.x = 163;
mcglove.y = 211;
mcglove.filters = [myDropShadowFilterDown];
mcglovetarget.x = 615;
mcglovetarget.y = 211;
mcglovetarget.alpha = 0
//action listeners
mcglove.addEventListener(MouseEvent.MOUSE_DOWN, selectGlove);
mcglove.addEventListener(MouseEvent.MOUSE_UP, releaseGlove);
function position(target) {
target.x = Math.round(Math.random() * (intMessageMaxX - intMessageMinX)) + intMessageMinX;
target.y = Math.round(Math.random() * (intMessageMaxY - intMessageMinY)) + intMessageMinY;
for (var i:uint=0; i<aMessages.length -1 ; i++) {
if(target.hitTestObject(aMessages[i]) && counter < LIMIT){
counter++;
position(target);
return false;
};
}
}
function selectGlove(event:MouseEvent):void {
event.target.startDrag(true);
var myTargetName:String = event.target.name + "target";
var myTarget:DisplayObject = getChildByName(myTargetName);
mcglove.filters = [myDropShadowFilterUp];
addChild(myTarget);
event.target.parent.addChild(event.target);
addChild(topShadowBox);
myTarget.alpha = .5;
startX = event.target.x;
startY = event.target.y;
}
function releaseGlove(event:MouseEvent):void {
event.target.stopDrag();
var myTargetName:String = event.target.name + "target";
var myTarget:DisplayObject = getChildByName(myTargetName);
event.target.filters = [myDropShadowFilterDown];
myTarget.alpha = 0;
if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, selectGlove);
event.target.removeEventListener(MouseEvent.MOUSE_UP, releaseGlove);
event.target.x = myTarget.x;
event.target.y = myTarget.y;
var myTween:Tween = new Tween(getChildByName(event.target.name), "scaleX",Strong.easeOut,getChildByName(event.target.name).scaleX,.28,2,true);
var myTween2:Tween = new Tween(getChildByName(event.target.name), "scaleY",Strong.easeOut,getChildByName(event.target.name).scaleY,.28,2,true);
holder.addChild(getChildByName(event.target.name));
scrollPane.source = holder;
holder.getChildByName(event.target.name).x=Math.round(Math.random() * (470+Math.round(scrollPane.horizontalScrollPosition) - Math.round(scrollPane.horizontalScrollPosition))) + Math.round(scrollPane.horizontalScrollPosition);
holder.getChildByName(event.target.name).y=Math.round(Math.random() * (intMessageMaxY - intMessageMinY)) + intMessageMinY;
holder.getChildByName(event.target.name).addEventListener(MouseEvent.MOUSE_DOWN, selectMessage);
holder.getChildByName(event.target.name).addEventListener(MouseEvent.MOUSE_UP, releaseMessage);
} else {
event.target.x = startX;
event.target.y = startY;
}
//sortObjects();
addChild(scrollPane);
addChild(pinkline);
addChild(topShadowBox);
}
function selectMessage(event:MouseEvent):void{
if (activeGloveName != ""){
var activeGlove:DisplayObject = holder.getChildByName(activeGloveName);
activeGlove.filters = [myDropShadowFilterSmall];
activeGlove.scaleX = .28;
activeGlove.scaleY = .28;
holder.addChild(activeGlove);
}
activeGloveName = event.target.name;
//event.target.dragIt();
holder.addChild(holder.getChildByName(event.target.name));
event.target.filters = [new GlowFilter(0xABEEFC, .65, 15, 15, 1, 1, false, false)];
event.target.scaleX = .35;
event.target.scaleY = .35;
}
function releaseMessage(event:MouseEvent):void{
event.target.dropIt();
}
function sortObjects():void{
addChild(mcglovetarget);
addChild(scrollPane);
addChild(pinkline);
addChild(searchBox);
addChild(mcglove);
addChild(topShadowBox);
}
mcglove.buttonMode = true;
}
}
}
Vous devez vous connecter pour publier un commentaire.
Si vous regardez la trace de l'erreur, l'erreur se produit à l'intérieur de
Si vous regardez ici vous découvrez que scrollDrag ...
Obtient ou définit une valeur qui indique si le défilement se produit lorsqu'un utilisateur fait glisser sur le contenu dans le volet de défilement.
Vous ne jamais mettre le contenu dans le panneau défilant
scrollPane.source = "...";
Je crois que c'est pourquoi le message d'erreur se produit, essayez de mettre un peu de contenu dans le composant scrollpane avant de définir le horizontalScrollPosition.
J'ai eu le même problème et a trouvé qu'il a causé. Au moins dans mon cas, le problème était que le composant scrollpane n'était pas encore un enfant de la scène.
Cela provoque l'erreur que vous décrivez:
Alors que cela fonctionne bien:
Espère que cela aide 🙂
horizontalScrollPosition est une propriété de composant ScrollPane de sorte que vous définissez à travers
composant scrollPane.horizontalScrollPosition = 500;
au lieu d'un appel de méthode.
Vous devez ajouter
ScrollPane
àstage
tout d'abord. SiscrollPane.stage == null
vous aurez une telle erreur.