Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Пунктирная линия пунктиром в 1px (Точечная) (http://www.flasher.ru/forum/showthread.php?t=190888)

Tails 28.12.2012 16:23

Пунктирная линия пунктиром в 1px (Точечная)
 
Вложений: 1
Как нарисовать пунктирную линию с точками в 1px? Что-то у меня не получается, вроде бы и координаты использую только целочисленные и все равно флеш плеер их "размазывает".

Если переключить quality в low, то линий таки приобретают необходимый вид.

Пунктир.swf   (1.0 Кб)


Код AS3:

import flash.display.CapsStyle;
import flash.display.LineScaleMode;
 
var dashSpace:int                = 2;
var dashSize:int                = 1;
var lineY:int                        = 50;
 
// line 1
this.graphics.lineStyle(0, 0x000000, 1, true, LineScaleMode.NONE, CapsStyle.NONE);
 
for (var i:int = 50; i < 200; i += dashSpace ) {
        this.graphics.moveTo(i, lineY)
        this.graphics.lineTo(i + dashSize, lineY);
 
        i += dashSize;
}
 
// line 2
lineY        = 80;
 
this.graphics.lineStyle(0, 0x000000, 1, false, LineScaleMode.NONE, CapsStyle.NONE);
 
for (i = 50; i < 200; i += dashSpace ) {
        this.graphics.moveTo(i, lineY)
        this.graphics.lineTo(i + dashSize, lineY);
 
        i += dashSize;
}


Tails 28.12.2012 17:22

Вообщем с линией у меня не получилось, сделал через фигуру:
Код AS3:

import flash.display.CapsStyle;
import flash.display.LineScaleMode;
 
var dashSpace:int                = 2;
var dashSize:int                = 1;
var lineY:int                        = int(50);
 
// line 1
this.graphics.beginFill(0x000000, 1);
 
for (var i:int = 50; i < 200; i += dashSpace ) {
        this.graphics.drawRect(i, lineY, dashSize, dashSize);
        i += dashSize;
}


caseyryan 28.12.2012 17:45

а если сделать растровую картинку 2 пикселя шириной 1 высотой, один сделать черным (ну или какой цвет там нужен), а другой другим цветом или прозрачный. И через lineBitmapStyle() задать стиль линии?
По-моему вариант гораздо удобнее.

Tails 28.12.2012 18:04

caseyryan,
Да, это отличная идея!

am_devcorp 31.12.2012 13:34

А как потом нарисовать эту линию?

Код AS3:

    public class Main extends Sprite {
 
                [Embed(source="../res/Untitled-1.png")]
                public var img:Class;
 
        public function Main():void {           
                        var bd:BitmapData =new img().bitmapData
                        this.graphics.lineBitmapStyle(bd)
                        this.graphics.lineTo(200,100)                       
        }
    }

ничего не рисует

(картинка нормальная, c beginBitmapFill работает нормально)

etc 31.12.2012 13:55

drawRect надо.

Wolsh 31.12.2012 14:32

Обычный lineStyle надо задавать сначала. Как еще Вы укажите толщину, прозрачность и т.п.
lineBitmapStyle задает только параметры битмапной заливки линии. Для рисования собственно линии lineStyle обязателен. И всегда таким был.

etc 31.12.2012 14:36

Оу, не заметил lineBitmapStyle

Wolsh 31.12.2012 16:19

Звездочка
Код AS3:

package 
{
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.geom.Matrix;
        import flash.geom.Rectangle;
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
\* * * * * * * * * */

        public class Main extends Sprite
        {
                public function Main():void
                {
                        // dash sample
                        var bd:BitmapData = new BitmapData(39, 1, true, 0x00000000);
                        bd.setPixel32(0, 0, 0xFF000000);
                        bd.fillRect(new Rectangle(4, 0, 20, 1), 0xFF000000);
                        bd.setPixel32(27, 0, 0xFF000000);
                        bd.fillRect(new Rectangle(31, 0, 5, 1), 0xFF000000);
                        // settings
                        var ang:Number = 142 * Math.PI / 180;
                        var thick:Number = 1;
                        var smooth:Boolean = true;
                        var scale:Number = 1;
                        // matrix for sample rotations
                        var matrix:Matrix = new Matrix();
                        matrix.createBox(scale, 1);
                        // draw star outline
                        this.graphics.moveTo(50, 150);
                        this.graphics.lineStyle(thick);
                        this.graphics.lineBitmapStyle(bd, matrix, true, smooth);
                        this.graphics.lineTo(350, 150);
                        matrix.rotate(ang);
                        this.graphics.lineStyle(thick);
                        this.graphics.lineBitmapStyle(bd, matrix, true, smooth);
                        this.graphics.lineTo(100, 330);
                        matrix.rotate(ang);
                        this.graphics.lineStyle(thick);
                        this.graphics.lineBitmapStyle(bd, matrix, true, smooth);
                        this.graphics.lineTo(200, 50);
                        matrix.rotate(ang);
                        this.graphics.lineStyle(thick);
                        this.graphics.lineBitmapStyle(bd, matrix, true, smooth);
                        this.graphics.lineTo(300, 330);
                        matrix.rotate(ang);
                        this.graphics.lineStyle(thick);
                        this.graphics.lineBitmapStyle(bd, matrix, true, smooth);
                        this.graphics.lineTo(50, 150);
                }
        }
}



Часовой пояс GMT +4, время: 08:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.