我最近选择了一些动作脚本,我决定让自己成为一个简单的弓箭游戏。到目前为止,我已经使箭头以弧形方式飞行。所以接下来是我的弓,并能够实际拉弦。
到目前为止,我认为我会将弓画成MC并使用图形绘制字符串。 我现在应该拉弦了,我不知道如何从这里前进。任何建议将非常感激。
如果可能的话,只要给我一个指针,我想自己编码,我不是要求完成结果。
代码:
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条线,这些图形是我在重新拉回弓时重绘的。
如果有人想看看我是怎么做的,那就是一个粗略的剪辑:
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);
}
答案 0 :(得分:1)
此阶段最好的事情是准确定义你想如何与弓箭互动。
根据渲染比例,您只需要绘制弓弦,使其跟随mousedown上的鼠标指针,但约束到您的首选限制。
在拉回时,你最好将琴弦从琴弓的任一端拉到两个约束的鼠标位置。
当你释放弓时,你可能想要在给定的点(可能是弓弦到达平点时)将弦作为单曲线绘制,这样你就可以绘制弦的弹性阶段运动。 (因为它休息了。)
希望您熟悉补间引擎,如果没有,请查看Desuades Motion Package或Tweensy等内容。 (您可以在http://fluxdb.fluxusproject.org)
找到它们答案 1 :(得分:1)
您可以在flash中使用绘图类。所以一个简单的例子可能看起来像这样。
myString.graphics.clear();
myString.graphics.lineStyle(1);
myString.graphics.moveTo(bowTopX,bowTopY);
myString.graphics.curveTo(mouseX,mouseY,bowBottomX,bowBottomY);
这会从弓的顶部到底部画一条线,并沿着鼠标所在的方向弯曲。你可以在一个函数中运行该代码,每次flash刷新显示器或鼠标移动时都会调用该函数。 clear()
允许你做的是清楚特定的形状并重新绘制它,如果以足够快的间隔完成它将看起来像它的动画
希望这能让您对可能的内容有所了解