首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉弓弦[闪光as3]

拉弓弦[闪光as3]
EN

Stack Overflow用户
提问于 2011-01-17 03:59:09
回答 2查看 1K关注 0票数 1

我最近学到了一些动作脚本,我决定给自己做一个简单的弓箭游戏。到目前为止,我已经让箭头以一种弧形的方式飞行。接下来我要做的就是拉弓,然后就可以拉绳子了。

到目前为止,我认为我将以MC的身份绘制弓,并使用图形来绘制弦。我已经到了该拉绳子的时候了,但我不知道如何从这里继续前进。任何建议都将不胜感激。

如果可能,只要给我一个指针,我想自己编写代码,我不是要求一个完成的结果。

代码:

代码语言:javascript
复制
package  {

    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Stage;
    import flash.events.MouseEvent;


    public class bow extends MovieClip {
        var myStage:Stage;
        var bowString:Shape;
        var bowStringMc:MovieClip;

        public function bow(stageRef) {
            this.myStage = stageRef;

            myStage.addChild(this);
            this.x = myStage.stageWidth / 2;
            this.y = myStage.stageHeight / 2;

            this.drawBowstring();
        }

        public function drawBowstring() {
            bowString   = new Shape();
            bowStringMc = new MovieClip();

            bowStringMc.addChild(bowString);
            myStage.addChild(bowStringMc);

            bowString.graphics.lineStyle(2, 0x000000);
            bowString.graphics.curveTo(-50,this.height/2,0,(this.height-10));

            bowStringMc.x = this.x-1;
            bowStringMc.y = this.y - this.height / 2 + 5;

            bowStringMc.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring);
        }

        public function pullBowstring(e:MouseEvent) {
            // Have to start redrawing the graphic i gess but how?
        }
    }

}

更新

Thx vvMINOvv & Slomojo,这两个答案对我很有帮助!我目前有2条线,这是当弓拉回时我重新绘制的图形。

如果其他人想看看我是怎么做到的,这里有一个粗略的片段:

代码语言:javascript
复制
    public function drawBowstring() {
        bowStringTop    = new Shape();
        bowStringBottom = new Shape();
        bowStringMc     = new MovieClip();

        bowStringMc.addChild(bowStringTop);
        bowStringMc.addChild(bowStringBottom);

        myStage.addChild(bowStringMc);

        bowStringTop.graphics.lineStyle(2, 0x000000);
        bowStringTop.graphics.moveTo(0, 0);
        bowStringTop.graphics.lineTo(0, this.height / 2);

        bowStringBottom.graphics.lineStyle(2, 0x000000);
        bowStringBottom.graphics.moveTo(0, this.height-10);
        bowStringBottom.graphics.lineTo(0, this.height / 2);

        bowStringMc.x = this.x-1;
        bowStringMc.y = this.y - this.height / 2 + 5;

        this.hand.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring);
    }

    public function pullBowstring(e:MouseEvent) {
        myStage.addEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring);
        myStage.addEventListener(MouseEvent.MOUSE_UP, releaseBowstring);
    }

    public function releaseBowstring(e:MouseEvent) {
        myStage.removeEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring);
        myStage.removeEventListener(MouseEvent.MOUSE_UP, releaseBowstring);
    }

    public function reDrawBowstring(e:MouseEvent) {
        if (this.hand.x < -18 || this.hand.x > 0) {
            this.releaseBowstring(e);
        }
        this.hand.x = mouseX;
        this.arrow.x = mouseX;

        bowStringTop.graphics.clear();
        bowStringBottom.graphics.clear();

        bowStringTop.graphics.lineStyle(2, 0x000000);
        bowStringTop.graphics.moveTo(0, 0);
        bowStringTop.graphics.lineTo(this.hand.x, (this.height / 2)-5);

        bowStringBottom.graphics.lineStyle(2, 0x000000);
        bowStringBottom.graphics.moveTo(0, this.height-10);
        bowStringBottom.graphics.lineTo(this.hand.x, (this.height / 2)-5);
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 07:20:38

你可以在flash中使用draw类。所以一个简单的例子可能看起来像这样。

代码语言:javascript
复制
myString.graphics.clear();
myString.graphics.lineStyle(1);
myString.graphics.moveTo(bowTopX,bowTopY);
myString.graphics.curveTo(mouseX,mouseY,bowBottomX,bowBottomY);

这将从弓的顶部到底部绘制一条线,并沿鼠标所在的方向弯曲。你可以让代码在一个函数中运行,这个函数会在每次flash刷新显示或其他东西时调用,或者在鼠标移动时调用。clear()允许您清除特定形状并重新绘制它,如果以足够快的时间间隔完成此操作,它看起来就像是动画

希望这篇文章能让您对可能发生的事情有所了解。

票数 1
EN

Stack Overflow用户

发布于 2011-01-17 04:27:36

在这个阶段最好的事情是准确地定义您希望如何与弓进行交互。

根据渲染比例的不同,您只需绘制弓形字符串,使其在鼠标按下时跟随鼠标指针,但限制为您喜欢的限制。

在拉回时,你最好把绳子画成两条线,从弓的两端到受约束的鼠标位置。

当您释放弓时,您可能希望在给定点(可能是当弓弦到达平坦点时)将弦绘制为单条曲线,以便您可以绘制弦运动的弹性阶段。(当涉及到休息时。)

希望你熟悉补间引擎,如果不熟悉,可以看看Desuades Motion Package或Tweensy。(你可以在http://fluxdb.fluxusproject.org上找到它们)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4707699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档