Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите разобраться в прорисовке линий (http://www.flasher.ru/forum/showthread.php?t=128758)

ERrorMAKros 16.08.2009 22:15

Вложений: 1
Друзья, добрый вечер, помогите пожалуйста разобраться в проблеме прорисовки линий.
Проблема показана в изображении (ниже)
Реализация класса:
Код AS3:

package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.LineScaleMode;
import flash.display.CapsStyle;
 
public class HPanel extends MovieClip
{
private var _ширина      : Number=0;
private var _высота      : Number=0;
private var _X            : Number=0;
private var _Y            : Number=0;
private var _смещениеЛинии: Number=0;
private var _толщинаЛинии : Number=0;
private var _цветЛинии    : Number=0;
 
public function HPanel(ширина_, высота_, смещениеЛинии_, толщинаЛинии_, цветЛинии_:Number=0)
{
// ---[ сохраняем настройки ]------------------------------------------------------------------------------------------------------------
  this._X            = 0;              // X
  this._Y            = 0;              // Y
  this._ширина        = ширина_;        // длинна диалогового окна;
  this._высота        = высота_;        // высота диалогового окна;
  this._смещениеЛинии = смещениеЛинии_; // отступ между линиями;
  this._толщинаЛинии  = толщинаЛинии_;  // толщина линии;
  this._цветЛинии    = цветЛинии_;    // цвет линий;
  Init(); // инициализания;
}
 
public function Init():void
{
var X0:Number =0;
var Y0:Number =0;
var X1:Number =0;
var Y1:Number =0;
 
while(true)
    {
          Y0+=this._смещениеЛинии;
          X1+=this._смещениеЛинии;
 
      if( Y0> this._высота){X0+=this._смещениеЛинии; Y0=this._высота;}
      if( X1> this._ширина){Y1+=this._смещениеЛинии; X1=this._ширина;}
 
      if((X1>=this._ширина-1) &&
          (Y1>=this._высота-1)){break;} // супер выход из цикла;
 
      var рисуемЛинии: Sprite  =new Sprite();
          рисуемЛинии. graphics.lineStyle(this._толщинаЛинии, this._цветЛинии, 1,false, LineScaleMode.NORMAL, CapsStyle.SQUARE); // показали стиль;
          рисуемЛинии. graphics.moveTo(X0, Y0);
          рисуемЛинии. graphics.lineTo(X1, Y1);
          trace("(",X0,",",Y0,") - (", X1,",",Y1,")");
          this.addChild(рисуемЛинии);
} // while
} // function
 
} // class
} // package

Запуск :)
Код AS3:

var панель: HPanel = new HPanel(300,200,4*2,4,0xFFFFFF);
    панель.x=30;
    панель.y=30;
addChild(панель);

...ну согласен, как бы - да, кривая математика.

wvxvw 16.08.2009 22:46

Вы бы еще обфускатором по коду прошлись, а потом выложили на форум...
А идея - вообще издевательство... отрисуйте небольшой кусочек в битмапдату и заливайте ею... зачем плодить кучу спрайтов?

ERrorMAKros 16.08.2009 22:56

Ну так нада :) Долго рассказывать все нюансы, проблема на данный момент в теме топика.

random13 17.08.2009 13:35

предлагаю передать данный код в надежные руки, вот сюда: http://govnokod.ru

ERrorMAKros 17.08.2009 14:44

Предлагаю не пиарить ресурсы типа http://govnokod.ru, и по мочь по делу! Именно для этого форум и существует.

iflamberg 17.08.2009 15:08

2wvxvw: по-моему такую текстуру клонировать - больше затрахаешься, чем нарисовать штрихами. по крайней мере - такие уголочки не получатся. В левом верхнем и правом нижнем еще по одному делению должно быть.

автору: реально лень разбираться. Похоже, что ошибка где-то здесь:

Код:

      if( Y0> this._высота){X0+=this._смещениеЛинии; Y0=this._высота;}
      if( X1> this._ширина){Y1+=this._смещениеЛинии; X1=this._ширина;}


wvxvw 17.08.2009 15:32

Как бы алгоритм будет по разному работать если высота и ширина четные / нечетные, а кроме того используются натуральные а не целые числа, изза этого тоже будет погрешность.
Не вижу абсолютно ничего сложного в отрисовке такой текстуры даже в том же фотошопе и потом - заливке... и быстрее гораздо получится, и быглядеть будет лучше.

ERrorMAKros 17.08.2009 15:37

Друзья,
Посмотрите пожалуйста пример сайта, и тогда вы поймете почему я не могу залить какой нибудь rectangle какой нибудь текстурой: http://www.massiveattack.co.uk

random13 17.08.2009 15:56

Цитата:

Сообщение от ERrorMAKros (Сообщение 843334)
Друзья,
Посмотрите пожалуйста пример сайта, и тогда вы поймете почему я не могу залить какой нибудь rectangle какой нибудь текстурой: http://www.massiveattack.co.uk

писец какой то... а это не пиар блин у вас, почитайте хотя бы мура сначала чтобы код больше ни у кого смеха не вызывал

пытался честно но так и не понял почему нельзя сделать как предложили...

ERrorMAKros 17.08.2009 16:07

Открыл для себя новинку - спрайт можно заливать .png текстурой с элементами прозрачности. При этом прозрачность сохраняется.
Остановлюсь всетаки на заливке :)
Всем спасибо!


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

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