Форум 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=207992)

ZackMercury 26.05.2014 00:30

Нарисовать круг из прямых.
 
Вложений: 1
Вроде бы элементарное дело, казалось бы.
Написал код, который должен рисовать круг из прямых.
Уже просмотрел свой код под линзой, всё равно не могу понять свою ошибку.
Код AS3:

graphics.lineStyle(1, 0x000000);
 
for(var i:int = 0; i < 360; i ++)
{
        graphics.lineTo(Math.cos(i/180*Math.PI) * 100, Math.sin(i/180 * Math.PI) * 100);
        graphics.moveTo(Math.cos((i+1)/180*Math.PI) * 100, Math.sin((i+1)/180*Math.PI) * 100);
}
 
 
var spr:Sprite = new Sprite();
spr.graphics.lineStyle(2, 0x000000);
spr.graphics.drawCircle(0, 0, 20);
addChild(spr);
 
super.addEventListener(Event.ENTER_FRAME, loop);
var pos:int = 0;
 
function loop(e:Event):void
{
        spr.x = 100 + Math.cos(pos / 180 * Math.PI) * 100;
        spr.y = 100 + Math.sin(pos / 180 * Math.PI) * 100;
        pos ++;
}

В итоге кружок нарисованный в спрайте методом drawCircle крутится по окружности, а вместо нарисованного круга я получаю горизонтальную палку.

KBAC 26.05.2014 01:12

Ну вы глупость какую-то написали:
1 проход цикла: рисуем линию. И двигаем указатель в следующую точку.

Остальные проходы: рисуем линию в точку в которой находимся(ничего не рисуем). Двигаем указатель в следующую точку.

Код AS3:

private function drawCircle(graphics:Graphics, radius:Number, centerX:Number = 0, centerY:Number = 0):void
{
        graphics.lineStyle(1, 0xFF0000);
        graphics.moveTo(radius + centerX, centerY);
 
        for(var i:int = 0; i < 361; i ++)
        {
                graphics.lineTo(Math.cos(i / 180 * Math.PI) * radius + centerX, Math.sin(i / 180 * Math.PI) * radius + centerY);
        }
}


ZackMercury 26.05.2014 01:22

Вложений: 1
Ага, вот в чём я ошибся... Я просто перепутал местами moveTo и lineTo. Спасибо, что объяснили, что значат имена этих методов, а то я голову себе ломал когда впервые их увидел)

Поменял местами и теперь всё работает.
Код AS3:

import flash.geom.Point;
import flash.text.engine.SpaceJustifier;
import flash.display.Sprite;
import flash.events.Event;
 
graphics.lineStyle(1, 0x000000);
 
for(var i:int = 0; i < 360; i ++)
{
        graphics.moveTo(120+Math.cos(i/180*Math.PI) * 100, 120+Math.sin(i/180 * Math.PI) * 100);
        graphics.lineTo(120+Math.cos((i+1)/180*Math.PI) * 100, 120+Math.sin((i+1)/180*Math.PI) * 100);
}
 
 
var spr:Sprite = new Sprite();
spr.graphics.lineStyle(2, 0x000000);
spr.graphics.drawCircle(0, 0, 20);
addChild(spr);
 
super.addEventListener(Event.ENTER_FRAME, loop);
var pos:int = 0;
 
function loop(e:Event):void
{
        spr.x = 120+Math.cos(pos / 180 * Math.PI) * 100;
        spr.y = 120+Math.sin(pos / 180 * Math.PI) * 100;
        pos ++;
}

circ.swf   (1.2 Кб)

KBAC 26.05.2014 01:25

moveTo() не нужен каждый раз. LineTo рисует линию и перемещает курсор. http://help.adobe.com/ru_RU/FlashPla...l#lineTo%28%29

ZackMercury 26.05.2014 01:27

О боже... Я походу совсем деградирую...
Рисовать учился я по примерам в инете давно уже, так до сих пор и не читал документацию о.О


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

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