メイン 迷える子羊の部屋【初心者専用】 オブジェクトの伸び縮み | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tomozou | Åê¹ÆNo.42757 投稿日時: 2009-7-1 19:48 |
新米 居住地: 東京 投稿: 3
使用環境:
WinXP(SP3) Flash CS3 ActionScript3.0 |
オブジェクトの伸び縮み お世話になります。
オブジェクトを上に伸ばしたり縮めたり、下に伸ばしたり縮めたりするflashをActionScriptを用いて作成したいと思っています。 下記のflashは途中まで作って断念したflashです。 伸縮せずにただ移動するだけです。 http://www.anshin-ichiba.jp/test.swf 理想は、上の矢印(▲)をドラッグして上にマウスを移動させると、オブジェクトの一番下を基準にして上方向に伸びていく。下にマウスを移動させると下方向に収縮していく。 また、下の矢印(▼)をドラッグして上にマウスを移動させると、オブジェクトの一番上を基準にして上方向に収縮し、マウスを下に移動させると下方向に伸びていく。 としたflashを作成したいです。 下記にソースを表示しますが、このソースの書き方は悪い書き方だと自分で思っています。もっと良いソースの書き方があれば教えていただけないでしょうか。 誠に恐縮ではございますが、よろしくお願いいたします。 --------------------------------------------------------- var DropSprite:Sprite = new Sprite(); DropSprite.graphics.clear(); DropSprite.graphics.lineStyle(2, 0x6699ff, 1.0, false, LineScaleMode.NONE); DropSprite.graphics.beginFill(0xcff0ff); DropSprite.graphics.drawRect(stage.stageWidth/2, stage.stageHeight/2, 45, 200); DropSprite.graphics.endFill(); DropSprite.name = "sprite"; addChild(DropSprite) var s_up:shift_Up = new shift_Up(); //ライブラリーから var s_down:shift_Down = new shift_Down(); //ライブラリーから s_up.x = stage.stageWidth/2-1; s_up.y = stage.stageHeight/2; s_down.x = stage.stageWidth/2-1; s_down.y = stage.stageHeight/2+200; addChild(s_up) addChild(s_down) s_up.buttonMode= true; s_up.useHandCursor = true; s_up.addEventListener(MouseEvent.MOUSE_DOWN, upMDown) s_down.buttonMode= true; s_down.useHandCursor = true; s_down.addEventListener(MouseEvent.MOUSE_DOWN, downMDown) function upMDown (event:MouseEvent):void { s_up.startDrag(false,new Rectangle(stage.stageWidth/2-1,0,0,10000)); s_up.addEventListener(MouseEvent.MOUSE_MOVE, upMMove) stage.addEventListener(MouseEvent.MOUSE_UP,upMUp) } function downMDown (event:MouseEvent):void { s_down.startDrag(false,new Rectangle(stage.stageWidth/2-1,0,0,10000)); s_down.addEventListener(MouseEvent.MOUSE_MOVE, downMMove) stage.addEventListener(MouseEvent.MOUSE_UP,downMUp); } function upMMove(event:MouseEvent):void { DropSprite.y = s_up.y-stage.stageHeight/2; s_down.y = s_up.y+200; event.updateAfterEvent(); } function downMMove(event:MouseEvent):void { DropSprite.y = s_down.y-stage.stageHeight/2-200; s_up.y = s_down.y-200; event.updateAfterEvent(); } function upMUp (event:MouseEvent):void { s_up.stopDrag(); s_up.removeEventListener(MouseEvent.MOUSE_MOVE,upMMove) stage.removeEventListener(MouseEvent.MOUSE_UP,upMUp); } function downMUp (event:MouseEvent):void { s_down.stopDrag(); s_down.removeEventListener(MouseEvent.MOUSE_MOVE,downMMove) stage.removeEventListener(MouseEvent.MOUSE_UP,downMUp); } --------------------------------------------------------- |
TJFORD | Åê¹ÆNo.42760 投稿日時: 2009-7-1 23:21 |
半人前 居住地: Tokyo 投稿: 42
使用環境:
:Flash CS3 |
Re: オブジェクトの伸び縮み こんにちは。
具体的に記述はできませんが、s_upとs_downの距離(y座標)を求めてDropSpriteのheightにその値を使えばまずは伸縮するのではないでしょうか? s_downはs_upより上にいかないとか、s_upはs_downより下にいかないとかの条件も必要かと思います。 あとDropSpriteのy座標は常にs_upのところに合わせるようにすればうまくいきそうな気がします。 頑張ってください! 以下追記 誰かブラッシュアップお願いします!! ------------------------------------------------------- package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; public class ResizeTest extends Sprite { private var _selectedBtn:Sprite; private var _contentsArea:Sprite; private var _btnUp:Sprite; private var _btnDown:Sprite; private const CONTENTS_HEIGHT:Number = 200; private const BTN_HEIGHT:Number = 20; public function ResizeTest() { //要素を作る _btnUp = makeSquare(0x000000,200,BTN_HEIGHT); _btnDown = makeSquare(0x000000,200,BTN_HEIGHT); _contentsArea = makeSquare(0xCCCCCC, 200, CONTENTS_HEIGHT); //とりあえず配置 _contentsArea.y = _btnUp.y+BTN_HEIGHT; _btnDown.y = _contentsArea.y+_contentsArea.height; //表示に追加 addChild(_contentsArea); addChild(_btnUp); addChild(_btnDown); //リスナー登録 _btnUp.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); _btnDown.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); } //1.マウスがダウンしたらはじまり private function mouseDownHandler(e:MouseEvent):void { _selectedBtn = Sprite(e.target); _selectedBtn.startDrag(false, new Rectangle(0, 0, 0, CONTENTS_HEIGHT)); _selectedBtn.addEventListener(Event.ENTER_FRAME, enterFrameHandler); _selectedBtn.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); //マウスがボタンの外でアップされた時のために stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } //2.マウスがアップしたら終わり private function mouseUpHandler(e:MouseEvent):void { _selectedBtn.stopDrag(); _selectedBtn.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); checkPosition(); } //3.ドラッグ中の毎フレームの処理 private function enterFrameHandler(e:Event):void { var _dist:Number = Math.abs( _btnUp.y -_btnDown.y ); _contentsArea.height = _dist _contentsArea.y = _btnUp.y; checkPosition(); } //2.と3.で呼ぶ。下のボタンが上のボタンより上にいかないように。逆も然り。※ここはもっとよい書き方あるかもしれません。 private function checkPosition():void{ if (_selectedBtn == _btnUp) { if (_btnUp.y > _btnDown.y-BTN_HEIGHT) { _btnUp.y = _btnDown.y -BTN_HEIGHT; } }else { if (_btnUp.y+BTN_HEIGHT > _btnDown.y) { _btnDown.y = _btnUp.y + BTN_HEIGHT; } } } //とりあえずボタンとかコンテンツエリアの作成する private function makeSquare(_col,_width,_height):Sprite{ var _sp:Sprite = new Sprite(); _sp.graphics.beginFill(_col); _sp.graphics.drawRect(0, 0, _width, _height); _sp.graphics.endFill(); return _sp; } } } |
tomozou | Åê¹ÆNo.42765 投稿日時: 2009-7-2 13:24 |
新米 居住地: 東京 投稿: 3
使用環境:
WinXP(SP3) Flash CS3 ActionScript3.0 |
オブジェクトの伸び縮み TJFORD様
ご返答ありがとうございます! 只今試してみたところ、自分のイメージ通りのものでした。 素晴らしいです! 綺麗に伸び縮みできていて驚きました。 もしお時間がございましたら、以下をご教授お願いできますでしょうか。 _btnDownをドラッグして赤ラインの部分の付近でマウスアップをすると_btnDownの一番下とラインが吸着するといった動きに最終的にしていきたいと思っております。 http://www.anshin-ichiba.jp/resize_test.swf いずれにしましても投稿に早急に対応していただけたこと誠に感謝しております。 --------------------------------------------------------- package { import flash.display.Sprite; import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; public class ResizeTest extends Sprite { private var _selectedBtn:Sprite; private var _contentsArea:Sprite; private var _btnUp:Sprite; //上ボタン private var _btnDown:Sprite; //下ボタン private var _goalLine:Sprite; //************追加 private const CONTENTS_HEIGHT:Number=200; private const BTN_HEIGHT:Number=20; public function ResizeTest() { //要素を作る _btnUp=makeSquare(0x000000,200,BTN_HEIGHT); _btnDown=makeSquare(0x000000,200,BTN_HEIGHT); _contentsArea=makeSquare(0xCCCCCC,200,CONTENTS_HEIGHT); _goalLine=makeSquare(0xff0000,200,2); //***********追加 //とりあえず配置 _contentsArea.y=_btnUp.y + BTN_HEIGHT; _btnDown.y=_contentsArea.y + _contentsArea.height; _goalLine.y=400;//***********追加 //表示に追加 addChild(_contentsArea); addChild(_btnUp); addChild(_btnDown); addChild(_goalLine);//***********追加 //リスナー登録 _btnUp.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); _btnDown.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); } //1.マウスがダウンしたらはじまり private function mouseDownHandler(e:MouseEvent):void { _selectedBtn=Sprite(e.target); _selectedBtn.startDrag(false,new Rectangle(0,0,0,450)); _selectedBtn.addEventListener(Event.ENTER_FRAME,enterFrameHandler); _selectedBtn.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); //マウスがボタンの外でアップされた時のために stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); } //2.マウスがアップしたら終わり private function mouseUpHandler(e:MouseEvent):void { _selectedBtn.stopDrag(); _selectedBtn.removeEventListener(Event.ENTER_FRAME,enterFrameHandler); /* var goal:DisplayObject = _selectedBtn.dropTarget; if(goal){ if(goal.parent == _goalLine){ _selectedBtn.x =_goalLine.x; _selectedBtn.y =_goalLine.y; return; } } */ checkPosition(); } //3.ドラッグ中の毎フレームの処理 private function enterFrameHandler(e:Event):void { var _dist:Number=Math.abs(_btnUp.y - _btnDown.y); _contentsArea.height=_dist; _contentsArea.y=_btnUp.y; checkPosition(); } //2.と3.で呼ぶ。下のボタンが上のボタンより上にいかないように。逆も然り。※ここはもっとよい書き方あるかもしれません。 private function checkPosition():void { if (_selectedBtn == _btnUp) { if (_btnUp.y > _btnDown.y - BTN_HEIGHT) { _btnUp.y=_btnDown.y - BTN_HEIGHT; } } else { if (_btnUp.y + BTN_HEIGHT > _btnDown.y) { _btnDown.y=_btnUp.y + BTN_HEIGHT; } } } //とりあえずボタンとかコンテンツエリアの作成する private function makeSquare(_col,_width,_height):Sprite { var _sp:Sprite=new Sprite ; _sp.graphics.beginFill(_col); _sp.graphics.drawRect(0,0,_width,_height); _sp.graphics.endFill(); return _sp; } } } --------------------------------------------------------- |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |