我是动作脚本的新手。试图将句子分为单词并以精灵的形式显示。而且还需要我单击的哪个精灵

发布于 2025-02-03 01:54:33 字数 1641 浏览 2 评论 0原文

我试图将句子分为单词,并将其显示为Sprite()

var sentence:String = "My name is Subhadip.";
var txt:Array = new Array();
var splittedSentence:Array = sentence.split(" ");

var myArraySprites:Array = new Array();
var myTextImage:Array = new Array();
var div = 40;
for (var i:int = 0; i < splittedSentence.length; i++)
{
    var v = 300 - (div * i);
    //...
    txt[i] = new TextField();
    txt[i].autoSize = TextFieldAutoSize.CENTER;
    txt[i].text = splittedSentence[i];
    
    var format1:TextFormat = new TextFormat();
    format1.size = 24;
    txt[i].setTextFormat(format1);
    trace(txt[i]);
    
    myArraySprites[i] = new Sprite();
    myArraySprites[i].graphics.lineStyle(1, 0x000000, 1);
    myArraySprites[i].buttonMode = true;
    myArraySprites[i].graphics.beginFill( 0xfffffff );
    myArraySprites[i].graphics.drawRect(50, v, 150, div);
    

    myTextImage[i] = new BitmapData(100,v,true,0xffffff);
    myTextImage[i].draw(txt[i]);
    trace(myTextImage[i]);
    
    
    //myArraySprites[i].graphics.beginBitmapFill(myTextImage[i]);
    //myArraySprites[i].graphics.endFill();

    myArraySprites[i].addChild(new Bitmap(myTextImage[i]));
    addChild(myArraySprites[i]);

    myArraySprites[i].addEventListener(MouseEvent.CLICK, removeThis);


}
function removeThis(e:MouseEvent):void
{
    var clickTarget:int = myArraySprites.indexOf(e.currentTarget);
    trace("Clicked sprite (id): " + clickTarget);
}

[在此处输入图像说明] [1]

试图将句子分为单词并在Sprite中显示。而且还需要我单击哪个精灵 [1]: https://i.sstatic.net/rzhuq.png

I am trying to split a sentence in to words and show them into sprite()

var sentence:String = "My name is Subhadip.";
var txt:Array = new Array();
var splittedSentence:Array = sentence.split(" ");

var myArraySprites:Array = new Array();
var myTextImage:Array = new Array();
var div = 40;
for (var i:int = 0; i < splittedSentence.length; i++)
{
    var v = 300 - (div * i);
    //...
    txt[i] = new TextField();
    txt[i].autoSize = TextFieldAutoSize.CENTER;
    txt[i].text = splittedSentence[i];
    
    var format1:TextFormat = new TextFormat();
    format1.size = 24;
    txt[i].setTextFormat(format1);
    trace(txt[i]);
    
    myArraySprites[i] = new Sprite();
    myArraySprites[i].graphics.lineStyle(1, 0x000000, 1);
    myArraySprites[i].buttonMode = true;
    myArraySprites[i].graphics.beginFill( 0xfffffff );
    myArraySprites[i].graphics.drawRect(50, v, 150, div);
    

    myTextImage[i] = new BitmapData(100,v,true,0xffffff);
    myTextImage[i].draw(txt[i]);
    trace(myTextImage[i]);
    
    
    //myArraySprites[i].graphics.beginBitmapFill(myTextImage[i]);
    //myArraySprites[i].graphics.endFill();

    myArraySprites[i].addChild(new Bitmap(myTextImage[i]));
    addChild(myArraySprites[i]);

    myArraySprites[i].addEventListener(MouseEvent.CLICK, removeThis);


}
function removeThis(e:MouseEvent):void
{
    var clickTarget:int = myArraySprites.indexOf(e.currentTarget);
    trace("Clicked sprite (id): " + clickTarget);
}

[enter image description here][1]

trying to split a sentence into words and show them in sprite.and also need which sprite i clicked
[1]: https://i.sstatic.net/RzHUQ.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

肤浅与狂妄 2025-02-10 01:54:33

问题在于,您正在两个不同的地方处理屏幕位置:

myArraySprites[i].graphics.drawRect(50, v, 150, div);

myTextImage[i] = new BitmapData(100,v,true,0xffffff);

以更面向对象的方式对其进行思考。每个Sprite实例您要单击是一个对象。因此,它还保留了主要属性,例如由xy属性确定的屏幕位置。

这些精灵中的每一个都具有相等的宽度&amp;高度,因此将其作为全球财产。

var wid:Number = 150;
var hei:Number = 40;

如果我们查看您的.png,我们可以看到您想在这样的精灵中以一个单词为中心。为了使事情变得更容易,我们可以使用.align textformat类的属性,将其设置为“ Center”,并使每个Textfield 150 x 40使用widhei属性。

最后,每个精灵的垂直屏幕位置都通过hei == 40像素移动。因此,让我们确定一个开始位置:

var yPos:Number = 300;

将其分配给Sprite实例:

myArraySprites[i].x=50;
myArraySprites[i].y=yPos;

并通过hei将其降低。

一切都放在一起:

            var yPos:Number = 300;
            var wid:Number = 150;
            var hei:Number = 40;
            var sentence:String = "My name is Subhadip.";
            var txt:TextField = new TextField();
            txt.width = wid;
            txt.height = hei;
            var format1:TextFormat = new TextFormat();
            format1.size = 24;
            format1.align = "center";
            var splittedSentence:Array = sentence.split(" ");

            var myTextImage:Array = new Array();
            for (var i:int = 0; i<splittedSentence.length; i++)
            {
                txt.text = splittedSentence[i];
                txt.setTextFormat(format1);

                myArraySprites[i] = new Sprite();
                myArraySprites[i].x = 50;
                myArraySprites[i].y = yPos;

                myArraySprites[i].graphics.lineStyle(1, 0x000000, 1);
                myArraySprites[i].buttonMode = true;
                myArraySprites[i].graphics.beginFill(0xfffffff);
                myArraySprites[i].graphics.drawRect(0, 0, wid, hei);

                myTextImage[i] = new BitmapData(wid, hei, true, 0xffffff);
                myTextImage[i].draw(txt);

                myArraySprites[i].addChild(new Bitmap(myTextImage[i]));
                addChild(myArraySprites[i]);

                myArraySprites[i].addEventListener(MouseEvent.CLICK, removeThis);

                yPos -= hei;
            }

The problem is that you're dealing with screen positions in two different places:

myArraySprites[i].graphics.drawRect(50, v, 150, div);

and

myTextImage[i] = new BitmapData(100,v,true,0xffffff);

Think of it in a more object-oriented way. Each Sprite instance you want to be clickable is a single object. As such it also holds the main properties e.g. the on-screen position determined by it's x and y properties.

Each of those sprites have equal width & height, so make this a global property.

var wid:Number = 150;
var hei:Number = 40;

If we look at your .png, we can see that you want to have a single word centered inside such a sprite. To make things easier, we can use the .align property of the TextFormat class, set it to "center" and make each TextField 150 x 40 by using the wid and hei properties.

Finally each sprite's vertical screen position is shifted up by hei == 40 pixels. So let's determine a start position:

var yPos:Number = 300;

assign it to a sprite instance:

myArraySprites[i].x=50;
myArraySprites[i].y=yPos;

and decrement it by hei inside the for-loop.

Everything put together:

            var yPos:Number = 300;
            var wid:Number = 150;
            var hei:Number = 40;
            var sentence:String = "My name is Subhadip.";
            var txt:TextField = new TextField();
            txt.width = wid;
            txt.height = hei;
            var format1:TextFormat = new TextFormat();
            format1.size = 24;
            format1.align = "center";
            var splittedSentence:Array = sentence.split(" ");

            var myTextImage:Array = new Array();
            for (var i:int = 0; i<splittedSentence.length; i++)
            {
                txt.text = splittedSentence[i];
                txt.setTextFormat(format1);

                myArraySprites[i] = new Sprite();
                myArraySprites[i].x = 50;
                myArraySprites[i].y = yPos;

                myArraySprites[i].graphics.lineStyle(1, 0x000000, 1);
                myArraySprites[i].buttonMode = true;
                myArraySprites[i].graphics.beginFill(0xfffffff);
                myArraySprites[i].graphics.drawRect(0, 0, wid, hei);

                myTextImage[i] = new BitmapData(wid, hei, true, 0xffffff);
                myTextImage[i].draw(txt);

                myArraySprites[i].addChild(new Bitmap(myTextImage[i]));
                addChild(myArraySprites[i]);

                myArraySprites[i].addEventListener(MouseEvent.CLICK, removeThis);

                yPos -= hei;
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文