캔버스를 사용하는 법을 배우기 시작했습니다. 2 일이 지난 지금부터 저는 ... 붙어 있습니다!캔버스 논리 문제
아래에서 시작하여 위로 확장하여 "트리"를 그리는 고고를 만들고 싶었습니다. '당신이 볼 수 있듯이 http://codepen.io/anon/pen/facmg
은, 첫 번째 줄은 잘 만들어하지만 ... 내가 할 수있는 : 여기
내 코드입니다 :var newX = 0;
var baseTaille = 20;
var lines = [];
var maxLines = 20;
var baseLifeTime = 50;
var timer = 0;
function Point (x,y) {
this.x = x;
this.y = y;
}
function Line(origin,direction,taille,ancestor,endingPoint)
{
this.origin = new Point(origin.x,origin.y);
this.direction = direction;
this.taille = taille;
this.ancestor = ancestor;
this.endingPoint = new Point(endingPoint.x,endingPoint.y);
this.lifeTime = taille;
}
var canvas;
var context;
$(document).ready(function() {
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
$("#canvas").attr("width",$(window).width());
$("#canvas").attr("height",$(window).height());
init();
});
function init() {
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000/60);
};
})();
animate();
}
var directions = {
'UP' : 1,
'FLAT' : 0
}
function animate() {
// update
if(timer == 0)
{
if (lines.length == 0) {
createLine(directions.UP,null,50);
}else
{
if(lines.length < maxLines)
{
//If the previous line is in the "FLAT" direction, create 2 lines UP
if (lines[lines.length-1].direction == directions.FLAT) {
var p = lines[lines.length-1];
p.endingPoint.x = lines[lines.length-1].origin.x;
createLine(directions.UP,p,10);
createLine(directions.UP,lines[lines.length-2],15);
}
if (lines[lines.length-1].direction == directions.UP) {
createLine(directions.FLAT,lines[lines.length-1],100);
}
}else
{
}
}
timer = baseLifeTime;
}
// clear
context.clearRect(0, 0, canvas.width, canvas.height);
// draw stuff
for(var l in lines){
var line = lines[l];
drawLine(context,line);
}
// request new frame
requestAnimFrame(function() {
animate();
timer--;
});
}
function drawLine (context,line) {
context.beginPath();
context.moveTo(line.origin.x, line.origin.y);
if(line.direction == directions.UP)
{
if(line.lifeTime > 0)
{
context.lineTo(line.endingPoint.x, line.endingPoint.y+line.lifeTime);
}
else
{
context.lineTo(line.endingPoint.x, line.endingPoint.y);
}
}
if(line.direction == directions.FLAT)
{
if(line.lifeTime > 0)
{
context.lineTo(line.endingPoint.x-line.lifeTime, line.endingPoint.y);
}
else
{
context.lineTo(line.endingPoint.x, line.endingPoint.y);
}
}
//context.globalAlpha = line.lifeTime/baseLifeTime;
line.lifeTime--;
context.strokeStyle = '#eee';
context.stroke();
//else
//{
//lines.splice(l,1);
//}
}
function createLine (direction,ancestor,taille) {
//TODO if !ancestor, we create the first "branch" of our tree
var origin;
if(ancestor == null)
{
origin = {
'x':($(window).width()/2),
'y':($(window).height())
};
endingPoint = {
'x':origin.x,
'y':(origin.y-taille)
};
ancestor = null;
}else
{
if (direction == directions.UP){
origin = ancestor.endingPoint;
endingPoint = {
'x':origin.x,
'y':(origin.y-taille)
};
}
if (direction == directions.FLAT)
{
origin = {
'x':(ancestor.endingPoint.x-(taille/2)),
'y':ancestor.endingPoint.y
};
endingPoint = {
'x':(origin.x+taille),
'y':(origin.y)
};
}
}
//We add the line to the "lines" array;
lines.push(new Line(origin,direction,taille, ancestor,endingPoint));
}
http://pastebin.com/Xxq99vuC 하고 그것으로 codepen "평생"재산이 0이 된 후에 "평평한"선이 그려지지 않은 이유를 이해하지 못합니다.
누군가 나를 도울 수 있는지 궁금합니다.
고마워요. 건배.
정말 고마워요! 이 사실을 알지 못했을 때, 객체를 복제 할 수있는 방법을 찾았고, 줄에 giveBirth 속성을 추가하여 조상 검사를 수행했습니다. 그래서 나는 선을 훑어보고 "선을 낳지"않았을 때를 만들었다. http://codepen.io/anon/pen/facmg하지만 지금은 애니메이션 속도 = s를 처리하는 방법을 궁금해. –