Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2016, 11:46
Новичок на форуме
Отправить личное сообщение для Martyna Посмотреть профиль Найти все сообщения от Martyna
 
Регистрация: 26.09.2016
Сообщений: 4

Canvas объект выходит за пределы поля
Здравствуйте! Подскажите, пожалуйста, что сделать, чтобы объект не выходил за пределы canvas?

window.onload = function() {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
 
 
ctx.fillStyle = "#FF0000";
ctx.fillRect(0,0,150,75);
 
var rec = new Object();
rec.x = 0;
rec.y = 0;
rec.moveright = function(){ rec.x++;}
rec.moveleft = function(){ rec.x--;}
rec.moveup = function(){ rec.y--;}
rec.movedown = function(){ rec.y++;}
rec.draw = function() {
    
    ctx.beginPath();
    ctx.clearRect(0,0,500,500);
    ctx.fillStyle = "#FF0000";
    ctx.fillRect(rec.x,rec.y,150,75);
    ctx.closePath();
}

 
document.onkeydown = function(e) {
//alert(e.keyCode);
if (e.keyCode == "37")
{
    
    rec.moveleft();
    rec.draw();
}

 
if (e.keyCode == "38")
{
	
	rec.moveup();
	rec.draw();
   
}
 
if (e.keyCode == "39")
{
	
    rec.moveright();
    rec.draw();
   
}
 
if (e.keyCode == "40")
{
	
    rec.movedown();
    rec.draw();
  
}
}


};
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2016, 11:52
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

То и сделать, не выпускать за пределы.
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2016, 12:03
Новичок на форуме
Отправить личное сообщение для Martyna Посмотреть профиль Найти все сообщения от Martyna
 
Регистрация: 26.09.2016
Сообщений: 4

не выпускала бы, если б знала как может подскажете?
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2016, 12:04
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

в методах move*** проверять, что объект не выскочит за пределы. Если выскочит, не менять икс или игрек.
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2016, 12:32
Новичок на форуме
Отправить личное сообщение для Martyna Посмотреть профиль Найти все сообщения от Martyna
 
Регистрация: 26.09.2016
Сообщений: 4

Спасибо большое за помощь!
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2016, 12:50
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Допустим ширина канваса 500

var w=500;

Откуда-то валится 600 в координату Y. Тогда на выводе:

y = Math.min(y,w);

Таким образом y никогда не будет больше w. Если "объект" больше пиксела, то из w еще надо вычесть его ширину.

obj.y = Math.min(obj.y,w-obj.w);

Наверно так, я с арифметикой не дружу.

Последний раз редактировалось warren buffet, 26.09.2016 в 12:52.
Ответить с цитированием
  #7 (permalink)  
Старый 26.09.2016, 23:57
Новичок на форуме
Отправить личное сообщение для Martyna Посмотреть профиль Найти все сообщения от Martyna
 
Регистрация: 26.09.2016
Сообщений: 4

Огромное спасибо за помощь!
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2016, 00:17
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

e.code в IE не поддерживается
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выходит получить объект из функции barsix Общие вопросы Javascript 3 07.08.2014 14:32
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Функция при наведении на Canvas объект max0n Общие вопросы Javascript 0 07.05.2013 17:56
Событие JS, объект выходит из области видимости браузера Z@R@ Events/DOM/Window 1 28.01.2013 07:02
Получение значения поля объекта зная путь к полю и сам объект mgvmax Общие вопросы Javascript 11 07.03.2012 19:09