Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2014, 22:31   #1
varanika
Новичок
Джуниор
 
Регистрация: 29.10.2014
Сообщений: 1
По умолчанию Canvas и javaScript

В общем беда такая - есть задача сделать простую игрушку, где летают шары по рандому и добавляются препятствия (все через кнопки, плюч очистка поля). Естественно, все должно взаимодействовать между собой и перетаскиваться мышкой. У меня пока лишь беда - то шарики летают, то препятствия ставятся, а вместе ну ни как. А уж как мышью работать вообще не пойму.
Код:
window.onload = function() {
             canvas = document.getElementById("canvas");
             context = canvas.getContext("2d");
             canvas.width = 800;
             canvas.height = 400;
              canvas.onmousedown = canvasClick;
         
           setTimeout("drawFrame()", 20);
	    setTimeout("draw()", 20);
	   function loaded() {
	X[0]=20;
	Y[0]=20
	block(0); //запускаем функцию[/JS]

var textX = 50;
var textY = 50;

function update() {
    textX += 1;
    textY += 1;
}

var FPS = 30; //интервал времени
var X=[]; //коорд X
var Y=[]; // коорд Y
var IdIl=0 // номер элемента


function Ball(x, y, dx, dy, radius) {
    this.x = x;
    this.y = y;
    this.dx = dx;
    this.dy = dy;
    this.radius = radius;
    var colors = ["green", "blue", "red", "yellow", "#756391", "orange", "brown", "#09a4d1", "pink"];
    var random =  Math.floor(Math.random()*colors.length);
    this.fillColor = colors[random];
}
function block(id_il){  //id_il - id элемента
    var colors = ["Snow", "GhostWhite", "WhiteSmoke", "Gainsboro", "FloralWhite", "Seashell", "MintCream", "Azure", "Grey"];
    var random =  Math.floor(Math.random()*colors.length);
    var big = ["70", "50", "60", "40", "80"];
    var small = ["5", "10", "15"];
    var randomBig =  Math.floor(Math.random()*big.length);
    var randomSmall =  Math.floor(Math.random()*small.length);  
   
    context.fillStyle = colors[random];
    context.beginPath();
    context.fillRect(X[id_il],Y[id_il], big[randomBig], small[randomSmall])
    context.closePath();
    context.fill();
}

var balls = [];
var blocks = []; //массив кирпичей, не работает, гад!

function addBall() {
    // Устанавливаем размер мячика
    var radius = parseFloat(document.getElementById("ballSize").value);
    // Создаем новый мячик
    var ball = new Ball(50,50,6,6,radius);
    // Сохраняем его в массиве
    balls.push(ball);
}
function addBlock() {  //!! кирпичи добавляются!!!
    IdIl++;
    var x = (1- Math.random())* (880-20); //генератор случайных чисел.
    var y = (1 - Math.random())* (420-20);
    X[IdIl] = x;
    Y[IdIl] = y;
    block(IdIl);
    blocks.push(block);
}



function clear() {
  // Удаляем все мячики и кирпичи
  balls = [];
  blocks = [];
}

function drawFrame() {
    // Очистить холст
    context.clearRect(0, 0, canvas.width, canvas.height);
    // Вызываем метод beginPath(), чтобы убедиться,
    // что мы не рисуем часть уже нарисованного содержимого холста
    context.beginPath();
    // Перебираем все мячики
    for(var i=0; i<balls.length; i++) {
        // Перемещаем каждый мячик в его новую позицию
        var ball = balls[i];
        ball.x += ball.dx;
        ball.y += ball.dy;
        // Добавляем движение мячика
        if ((ball.y) < canvas.height) ball.dy;
        // Добавляем эффект "трения", который замедляет движение мячика
        ball.dx = ball.dx * 0.999;
        // Если мячик натолкнулся на край холста, отбиваем его, но слегка увеличиваем скорость, чтоб не заглох
        if ((ball.x + ball.radius > 800) || (ball.x - ball.radius < 0)) {
            ball.dx = -ball.dx*1.01;
        }
        // Если мячик упал вниз, отбиваем его, но слегка уменьшаем скорость
        if ((ball.y + ball.radius > canvas.height) || (ball.y - ball.radius < 0)) {
            ball.dy = -ball.dy*0.99;
        }
            context.beginPath();
            context.fillStyle = ball.fillColor;
        // Рисуем мячик
        context.arc(ball.x, ball.y, ball.radius, 0, Math.PI*2);        
        context.fill();
    }
    // Рисуем следующий кадр через 20 миллисекунд
    setTimeout("drawFrame()", 20);
}
function draw() {
        block ();
	setTimeout("draw()", 20);
}


function canvasClick(e) {
  // Координаты щелчка мышью
  var clickX = e.pageX - canvas.offsetLeft;
  var clickY = e.pageY - canvas.offsetTop;
  for(var i in balls)
  {
    var ball = balls[i];
	
	// Проверка попадания
    if ((clickX > (ball.x-ball.radius)) && (clickX < (ball.x+ball.radius)))
    {
      if ((clickY > (ball.y-ball.radius)) && (clickY < (ball.y+ball.radius)))
      {
        // Изменить скорость мячика
        ball.dx -= 4;
        ball.dy -= 5;
        return;
      }
    }
  }
}
varanika вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript - классы, они есть или их нету в Javascript? Kasper1 JavaScript, Ajax 3 05.03.2011 09:42
[canvas] Fiery Fox Мультимедиа в Delphi 3 22.02.2011 02:28
javascript:canvas Hard666 JavaScript, Ajax 0 31.05.2010 23:40