Создание сетки в as3 - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь сделать сетку на квадраты, используя as3. Я использую вложенные циклы для создания сетки.

import flash.display.Shape;
import flash.display.MovieClip;    

var n=10;

var myClip = new MovieClip;
stage.addChild(myClip);

for (var i = 0; i < n * 10; i += 10) {
    for (var j = 0; j < n * 10; j += 10) {
        var _shape = new Shape;
        myClip.addChild(_shape);
        _shape.graphics.lineStyle(1);
        _shape.graphics.beginFill(0xcccccc);
        _shape.graphics.drawRect(i, j, 10, 10);
        _shape.graphics.endFill();
    }
}

Я применяю жесты масштабирования и панорамирования на моем клипе. Для этого размера сетки все работает отлично. Как только я увеличиваю значение n, оно начинает отставать

Моя игра требует большей сетки. Пожалуйста, помогите

1 Ответ

0 голосов
/ 16 июля 2018

Я покажу некоторые идеи в виде кода, мой AS3 немного ржавый, но, возможно, это помогает.

Вы можете уменьшить количество экземпляров Shape или нарисовать векторную сетку в растровом изображении. Так как вы изменяете масштаб и панорамируете его, вы захотите сгладить его. В зависимости от производительности и степени масштабирования вы также можете нарисовать растровое изображение с более высоким разрешением, чем изначально использовалось. См. Комментарии ниже.

import flash.display.Shape;
import flash.display.MovieClip;    

var n=10;

// do you actually need dynamic binding or a timeline in this?
// if not (also if you don't know what it means) do use the Sprite class instead
var myClip = new MovieClip;
stage.addChild(myClip);

// if you don't need individual shapes move this out of the for loop
// your logic with all of the shapes having the same origin suggests this might be so
var _shape = new Shape;
myClip.addChild(_shape);

for (var i = 0; i < n * 10; i += 10) {
    for (var j = 0; j < n * 10; j += 10) {
        _shape.graphics.lineStyle(1);
        _shape.graphics.beginFill(0xcccccc);
        _shape.graphics.drawRect(i, j, 10, 10);
        _shape.graphics.endFill();
    }
}

// then we can draw the grid to a bitmap
// since you are scaling it I'm drawing it a 300% resolution
var _bmd:BitmapData = new BitmapData(_shape.width*3, _shape.height*3, true, 0);
var _bit:Bitmap = new Bitmap(_bmd);
myClip.addChild(_bit);
_shape.width*=3;
_shape.height*=3;
_bmd.draw(stage); 
_bit.smoothing = true;
_bit.width/=3;
_bit.height/=3;

// and remove the vector shape so it won't be rendered
myClip.removeChild(_shape);
// if need be it can be redrawn later
...