sjors-wat?
%Europe/Berlin %574 %2009, 14:47
Daar zit ik weer.
Voor mijn werk heb ik een 3d object en dat moet nu in flash met een slider ronddraaien. Ik heb nu het object 360graden laten draaien. Daar heb ik frames van gerenderd (250).
Wat ik al heb:
1 scene met een preloader, het bestand is best groot.
2de scene is een intro. Waar dmv een filmpje word laten zien dat je over enkele onderdelen van het object kan rollen met je muis om meer informatie te krijgen.
3de scene het object (een airco-systeem of iets dergelijks).
In de 3de scene moet je dus met een slider dat object kunnen controleren. Daarvoor heb ik 2 .as files geschreven die het (raar genoeg) in een oudere versie van dit project wel doen
Nouja hier is mijn script en de script van de .as files:
Slides.as:
/* dependencies:
- Knob = library item
- TriangleButton = library item
*/
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Rectangle;
public class Slider extends Sprite
{
private var knob:Knob;
private var slot:Sprite;
private var leftButton:TriangleButton;
private var rightButton:TriangleButton;
private var _width:Number;
private var _height:Number;
private var _value:Number = 0;
private var slideSpace:Number;
private var maxX:Number;
private var beginX:Number;
private const BUTTON_WIDTH:Number = 10;
// constructor
public function Slider (w:Number = 100, h:Number = 15)
{
_width = w;
_height = h;
leftButton = new TriangleButton();
leftButton.addEventListener(MouseEvent.MOUSE_DOWN, startMoveLeft);
leftButton.addEventListener(MouseEvent.MOUSE_UP, stopMoveLeft);
leftButton.rotation = 180;
leftButton.x = BUTTON_WIDTH/2 + leftButton.width/2;
rightButton = new TriangleButton();
rightButton.addEventListener(MouseEvent.MOUSE_DOWN , startMoveRight);
rightButton.addEventListener(MouseEvent.MOUSE_UP, stopMoveRight);
knob = new Knob();
knob.addEventListener(MouseEvent.MOUSE_DOWN, startSlide);
knob.addEventListener(MouseEvent.MOUSE_UP, stopSlide);
addEventListener(Event.ADDED_TO_STAGE, addLeaveHandler);
addChild(knob);
addChild(leftButton);
addChild(rightButton);
slideSpace = _width - (BUTTON_WIDTH * 2) - knob.width;
beginX = BUTTON_WIDTH + 2;
maxX = beginX + slideSpace;
draw();
}
// getters and setters for width
public override function set width(w:Number):void
{
if (w > _width - (BUTTON_WIDTH * 2) + 8 - knob.width) {
_width = w;
slideSpace = _width - (BUTTON_WIDTH * 2) - knob.width;
maxX = beginX + slideSpace;
draw();
}
}
public override function get width():Number
{
return _width;
}
// getters and setters for height
public override function set height(h:Number):void
{
_height = h;
draw();
}
public override function get height():Number
{
return _width;
}
// getters and setters for value
public function set value(val:Number):void
{
if (val >= 0 || val <= 1) {
_value = val;
}
draw();
}
public function get value():Number
{
return _value;
}
// slider renderer
private function draw():void
{
graphics.lineStyle(1, 0x1F6B85);
graphics.drawRect(0,0,_width,_height);
graphics.endFill();
leftButton.y = _height/2 + leftButton.height/2;
rightButton.x = _width - BUTTON_WIDTH/2 - rightButton.width/2;
rightButton.y = _height/2 - rightButton.height/2;
knob.height = _height-1;
knob.scaleX = knob.scaleY;
leftButton.buttonMode = true;
rightButton.buttonMode = true;
knob.buttonMode = true;
knob.y = 1;
knob.x = beginX + slideSpace * _value;
}
// event callbacks
private function startMoveLeft(event:MouseEvent):void {
addEventListener(Event.ENTER_FRAME, moveLeft);
}
private function stopMoveLeft(event:MouseEvent) {
removeEventListener(Event.ENTER_FRAME, moveLeft);
}
private function moveLeft(event:Event):void {
knob.x -= 10;
if (knob.x < beginX) {
knob.x = beginX;
}
_value = (knob.x - beginX)/slideSpace;
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
}
private function startMoveRight(event:MouseEvent) {
addEventListener(Event.ENTER_FRAME, moveRight);
}
private function stopMoveRight(event:MouseEvent) {
removeEventListener(Event.ENTER_FRAME, moveRight);
}
private function moveRight(event:Event):void {
knob.x += 10;
if (knob.x > maxX) {
knob.x = maxX;
}
_value = (knob.x - beginX)/slideSpace;
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
}
private function startSlide(event:MouseEvent):void {
var rect = new Rectangle(beginX,1,slideSpace,0);
knob.startDrag(false, rect);
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragging);
trace("sliding");
}
private function stopSlide(event:MouseEvent):void {
trace("stop sliding");
knob.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragging);
}
private function leaveSlider(event:Event):void {
knob.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragging);
}
private function dragging(event:MouseEvent):void {
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
event.updateAfterEvent();
_value = (knob.x - beginX)/slideSpace;
trace("dragging; value:",_value);
}
private function addLeaveHandler(event:Event):void {
stage.addEventListener(MouseEvent.MOUSE_UP, stopSlide);
stage.addEventListener(Event.MOUSE_LEAVE, leaveSlider);
}
}
}
SlideEvent.as:
package
{
import flash.events.Event;
public class SlideEvent extends Event {
public static var SLIDE:String = "slide";
public function SlideEvent (type:String, bubbles:Boolean = false, cancelable:Boolean = false) {
super(type, bubbles, cancelable);
}
public override function clone():Event {
return new SlideEvent(type, bubbles, cancelable);
}
public override function toString():String {
return formatToString("SlideEvent", "type", "bubbles", "cancelable", "eventPhase");
}
}
}
En dan het script dat op het eerste frame van mijn flash bestand staat:
var startFrame:uint = 0;
startFrame = currentFrame;
trace("deze scene begint op frame",startFrame);
//gotoAndStop(3);
gotoAndStop(123);
var slider:Slider = new Slider(690,12);
slider.x = 10;
slider.y = 425;
slider.addEventListener(SlideEvent.SLIDE, update);
slider.alpha =1;
slider.value = .492;
addChild(slider);
function update(event:SlideEvent):void {
trace("sliding");
gotoAndStop(Math.ceil((scenes["Slider"].numFrames) * event.target.value));
}
Dat is alles zo'n beetje.. Ik krijg geen compile errors maar in mijn output veld krijg ik dit te zien als ik probeer te sliden:
deze scene begint op frame 1
sliding
sliding
TypeError: Error #1010: A term is undefined and has no properties.
at slide_3d_V4_fla::MainTimeline/update()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Slider/dragging()
dragging; value: 0.4902944563250535
sliding
Wat wel en niet werkt:
Sliden, je kan de slider heen en weer halen maar dat krijg ik dus die TypeError de HELE tijd.
Het object draait niet.
De rollovers van de objecten heb ik er nog niet opstaan omdat previews kijken zo vervelend zijn de hele tijd.
Heeft iemand een oplossing om de slider de tijdlijn wel te laten controleren? en dan alleen die van de 3de scene? Ik heb het idee dat er met de Slider.as en SlideEvent.as niets aan de hand is.. Alleen met het script in mijn flash zelf.
Alvast hartelijk bedankt,
Groeten sjors,
Voor mijn werk heb ik een 3d object en dat moet nu in flash met een slider ronddraaien. Ik heb nu het object 360graden laten draaien. Daar heb ik frames van gerenderd (250).
Wat ik al heb:
1 scene met een preloader, het bestand is best groot.
2de scene is een intro. Waar dmv een filmpje word laten zien dat je over enkele onderdelen van het object kan rollen met je muis om meer informatie te krijgen.
3de scene het object (een airco-systeem of iets dergelijks).
In de 3de scene moet je dus met een slider dat object kunnen controleren. Daarvoor heb ik 2 .as files geschreven die het (raar genoeg) in een oudere versie van dit project wel doen
Nouja hier is mijn script en de script van de .as files:
Slides.as:
/* dependencies:
- Knob = library item
- TriangleButton = library item
*/
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Rectangle;
public class Slider extends Sprite
{
private var knob:Knob;
private var slot:Sprite;
private var leftButton:TriangleButton;
private var rightButton:TriangleButton;
private var _width:Number;
private var _height:Number;
private var _value:Number = 0;
private var slideSpace:Number;
private var maxX:Number;
private var beginX:Number;
private const BUTTON_WIDTH:Number = 10;
// constructor
public function Slider (w:Number = 100, h:Number = 15)
{
_width = w;
_height = h;
leftButton = new TriangleButton();
leftButton.addEventListener(MouseEvent.MOUSE_DOWN, startMoveLeft);
leftButton.addEventListener(MouseEvent.MOUSE_UP, stopMoveLeft);
leftButton.rotation = 180;
leftButton.x = BUTTON_WIDTH/2 + leftButton.width/2;
rightButton = new TriangleButton();
rightButton.addEventListener(MouseEvent.MOUSE_DOWN , startMoveRight);
rightButton.addEventListener(MouseEvent.MOUSE_UP, stopMoveRight);
knob = new Knob();
knob.addEventListener(MouseEvent.MOUSE_DOWN, startSlide);
knob.addEventListener(MouseEvent.MOUSE_UP, stopSlide);
addEventListener(Event.ADDED_TO_STAGE, addLeaveHandler);
addChild(knob);
addChild(leftButton);
addChild(rightButton);
slideSpace = _width - (BUTTON_WIDTH * 2) - knob.width;
beginX = BUTTON_WIDTH + 2;
maxX = beginX + slideSpace;
draw();
}
// getters and setters for width
public override function set width(w:Number):void
{
if (w > _width - (BUTTON_WIDTH * 2) + 8 - knob.width) {
_width = w;
slideSpace = _width - (BUTTON_WIDTH * 2) - knob.width;
maxX = beginX + slideSpace;
draw();
}
}
public override function get width():Number
{
return _width;
}
// getters and setters for height
public override function set height(h:Number):void
{
_height = h;
draw();
}
public override function get height():Number
{
return _width;
}
// getters and setters for value
public function set value(val:Number):void
{
if (val >= 0 || val <= 1) {
_value = val;
}
draw();
}
public function get value():Number
{
return _value;
}
// slider renderer
private function draw():void
{
graphics.lineStyle(1, 0x1F6B85);
graphics.drawRect(0,0,_width,_height);
graphics.endFill();
leftButton.y = _height/2 + leftButton.height/2;
rightButton.x = _width - BUTTON_WIDTH/2 - rightButton.width/2;
rightButton.y = _height/2 - rightButton.height/2;
knob.height = _height-1;
knob.scaleX = knob.scaleY;
leftButton.buttonMode = true;
rightButton.buttonMode = true;
knob.buttonMode = true;
knob.y = 1;
knob.x = beginX + slideSpace * _value;
}
// event callbacks
private function startMoveLeft(event:MouseEvent):void {
addEventListener(Event.ENTER_FRAME, moveLeft);
}
private function stopMoveLeft(event:MouseEvent) {
removeEventListener(Event.ENTER_FRAME, moveLeft);
}
private function moveLeft(event:Event):void {
knob.x -= 10;
if (knob.x < beginX) {
knob.x = beginX;
}
_value = (knob.x - beginX)/slideSpace;
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
}
private function startMoveRight(event:MouseEvent) {
addEventListener(Event.ENTER_FRAME, moveRight);
}
private function stopMoveRight(event:MouseEvent) {
removeEventListener(Event.ENTER_FRAME, moveRight);
}
private function moveRight(event:Event):void {
knob.x += 10;
if (knob.x > maxX) {
knob.x = maxX;
}
_value = (knob.x - beginX)/slideSpace;
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
}
private function startSlide(event:MouseEvent):void {
var rect = new Rectangle(beginX,1,slideSpace,0);
knob.startDrag(false, rect);
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragging);
trace("sliding");
}
private function stopSlide(event:MouseEvent):void {
trace("stop sliding");
knob.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragging);
}
private function leaveSlider(event:Event):void {
knob.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragging);
}
private function dragging(event:MouseEvent):void {
dispatchEvent(new SlideEvent(SlideEvent.SLIDE));
event.updateAfterEvent();
_value = (knob.x - beginX)/slideSpace;
trace("dragging; value:",_value);
}
private function addLeaveHandler(event:Event):void {
stage.addEventListener(MouseEvent.MOUSE_UP, stopSlide);
stage.addEventListener(Event.MOUSE_LEAVE, leaveSlider);
}
}
}
SlideEvent.as:
package
{
import flash.events.Event;
public class SlideEvent extends Event {
public static var SLIDE:String = "slide";
public function SlideEvent (type:String, bubbles:Boolean = false, cancelable:Boolean = false) {
super(type, bubbles, cancelable);
}
public override function clone():Event {
return new SlideEvent(type, bubbles, cancelable);
}
public override function toString():String {
return formatToString("SlideEvent", "type", "bubbles", "cancelable", "eventPhase");
}
}
}
En dan het script dat op het eerste frame van mijn flash bestand staat:
var startFrame:uint = 0;
startFrame = currentFrame;
trace("deze scene begint op frame",startFrame);
//gotoAndStop(3);
gotoAndStop(123);
var slider:Slider = new Slider(690,12);
slider.x = 10;
slider.y = 425;
slider.addEventListener(SlideEvent.SLIDE, update);
slider.alpha =1;
slider.value = .492;
addChild(slider);
function update(event:SlideEvent):void {
trace("sliding");
gotoAndStop(Math.ceil((scenes["Slider"].numFrames) * event.target.value));
}
Dat is alles zo'n beetje.. Ik krijg geen compile errors maar in mijn output veld krijg ik dit te zien als ik probeer te sliden:
deze scene begint op frame 1
sliding
sliding
TypeError: Error #1010: A term is undefined and has no properties.
at slide_3d_V4_fla::MainTimeline/update()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Slider/dragging()
dragging; value: 0.4902944563250535
sliding
Wat wel en niet werkt:
Sliden, je kan de slider heen en weer halen maar dat krijg ik dus die TypeError de HELE tijd.
Het object draait niet.
De rollovers van de objecten heb ik er nog niet opstaan omdat previews kijken zo vervelend zijn de hele tijd.
Heeft iemand een oplossing om de slider de tijdlijn wel te laten controleren? en dan alleen die van de 3de scene? Ik heb het idee dat er met de Slider.as en SlideEvent.as niets aan de hand is.. Alleen met het script in mijn flash zelf.
Alvast hartelijk bedankt,
Groeten sjors,