Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 14

Ограничение зоны на карте в 2D игре

30.03.2018, 10:55. Показов 1996. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, как сделать ограничение, до красных линий? Как на этой картинке.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2018, 10:55
Ответы с готовыми решениями:

Как в игре ограничить движение космического корабля областью игровой зоны
Здравствуйте,у меня такой вопрос.Я написал маленькую игру, типо космического корабля который сносит летящие ему на встречу вражеские...

Определите тип данных, представлющий информацию о карте в карточной игре
Определите тип данных, представлющий информацию о карте в карточной игре. Каждая карта характеризуется одной из четырех мастей. Карта может...

Ограничение мышки в игре
Мне нужно что бы мышка отступала от краев в игре на 10 пикселей. Как такое реализовать? Например: ...

16
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
30.03.2018, 17:29
Без контекста вопрос не имеет не только смысла, но и решения.
0
388 / 275 / 76
Регистрация: 19.09.2011
Сообщений: 828
31.03.2018, 16:35
использовать алгоритмы поиска пути
https://ru.wikipedia.org/wiki/... 1%82%D0%B8
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
01.04.2018, 07:14
Если главный герой управляется кликом мыши, то да нужен алгорим поиска пути. Если клавиатурой, то нужно каждый игровой тик проверять не попадают ли (x + dx) и (y + dy) в запретные зоны.
1
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 14
03.04.2018, 20:35  [ТС]
А как указать эти запретные зоны, именно кривые линии?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
04.04.2018, 06:23
Прямыми линиями и условиями if
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
04.04.2018, 09:59
Опишу простейший случай запретных зон в 1D.

Пусть точка может передвигаться только по оси X:
Название: point1.png
Просмотров: 58

Размер: 768 байт

Обозначим на рисунке запретные зоны:
Название: point2.png
Просмотров: 58

Размер: 1.4 Кб

Точка может перемещаться влево и вправо в диапазоне [5, 10], что можно проверять с помощью условий if перед тем, как вы хотите передвинуть точку на приращение dx. Если новая координата x = x + dx меньше, чем 5 или больше, чем 10, то изменение координаты не происходит.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
04.04.2018, 13:35
Разбей сложную фигуру на треугольные полигоны и проверяй принадлежность к каждому из них.
Навскидку:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
    
    Object.freeze(this);
  }
  
  toString() {
    return `(${this.x};${this.y})`;
  }
}
 
class Triangle {
  constructor(a, b, c) {
    this.a = a;
    this.b = b;
    this.c = c;
    
    Object.freeze(this);
  }
  
  toString() {
    return [this.a, this.b, this.c].map(i => i.toString()).join(' ');
  }
}
 
const pointInsideTriangle = (pt, tri) => {
  const sgn = (base, a, b) => ((a.x - base.x) * (b.y - a.y) - (b.x - a.x) * (a.y - base.y)) > 0;
  const signs = [
    sgn(pt, tri.a, tri.b), 
    sgn(pt, tri.b, tri.c), 
    sgn(pt, tri.c, tri.a)
  ];
  
  return signs[0] === signs[1] && signs[1] === signs[2];
}
Демо: https://codepen.io/eva-rosalene/pen/PRBgqL
Код демосцены
HTML5
1
2
Click to place point<br />
Double-click to generate new triangle<br />
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Live demo
 
class Text {
  constructor(data, x, y) {
    this.data = data;
    this.x = x;
    this.y = y;
    Object.freeze();
  }
}
 
const getRandomPoint = (x, y, width, height) => {
  return new Point(
    Math.random() * width + x,
    Math.random() * height + y
  );
}
 
class Scene {
  constructor(width, height) {
    this.canvas = document.createElement('canvas');
    this.canvas.width = width;
    this.canvas.height = height;
    
    this.width = width;
    this.height = height;
    
    this.context = this.canvas.getContext('2d');
    
    this.elements = [];
  }
  
  render() {
    this.context.fillStyle = 'lightgray';
    this.context.fillRect(0, 0, this.width, this.height);
    
    for (let element of this.elements) {
      if (element instanceof Point) {
        this.context.save();
        this.context.fillStyle = 'red';
        
        this.context.beginPath();
        this.context.arc(element.x, element.y, 5, 0, 2 * Math.PI);
        this.context.fill();
        this.context.restore();
      }
      if (element instanceof Triangle) {
        this.context.save();
        this.context.fillStyle = 'darkgray';
        this.context.strokeStyle = 'black';
        
        this.context.beginPath();
        this.context.moveTo(element.a.x, element.a.y);
        this.context.lineTo(element.b.x, element.b.y);
        this.context.lineTo(element.c.x, element.c.y);
        this.context.closePath();
        
        this.context.fill();
        this.context.stroke();
        
        this.context.restore();
      }
      if (element instanceof Text) {
        this.context.save();
        
        this.context.fillStyle = 'black';
        this.context.textBaseline = 'top';
        this.context.font = '20px sans';
        this.context.fillText(element.data, element.x, element.y);
        
        this.context.restore();
      }
    }
  }
  
  init() {
    this.elements = [
      new Triangle(
        getRandomPoint(0, 100, this.width, this.height - 100),
        getRandomPoint(0, 100, this.width, this.height - 100),
        getRandomPoint(0, 100, this.width, this.height - 100)
      ),
      this.elements[1] || getRandomPoint(0, 100, this.width, this.height - 100)
    ];
    
    const text = pointInsideTriangle(this.elements[1], this.elements[0]) ?
          'Point is inside of triangle' :
          'Point is outside of triangle';
    
    this.elements.push(new Text(text, 10, 10));
  }
  
  placePoint(x, y) {
    this.elements[1] = new Point(x, y);
    const text = pointInsideTriangle(this.elements[1], this.elements[0]) ?
          'Point is inside of triangle' :
          'Point is outside of triangle';
    
    this.elements[2] = new Text(text, 10, 10);
  }
}
 
const sc = new Scene(500, 500);
document.body.appendChild(sc.canvas);
 
sc.canvas.addEventListener('click', evt => {
  sc.placePoint(evt.offsetX, evt.offsetY);
  sc.render();
}, true);
 
sc.canvas.addEventListener('dblclick', () => {
  sc.init();
  sc.render();
}, true);
 
sc.init();
sc.render();
0
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 14
05.04.2018, 14:04  [ТС]
Управление клавиатурой.
Есть линия и если персонаж попадает в эти координаты, то остановить его.
JavaScript
1
2
3
4
5
6
var canvas=document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
ctx.lineWidth = 5;
var qq2 = ctx.moveTo(50, 50); 
var qq = ctx.lineTo(210, 130);
ctx.stroke();
Получается сделать только по высоте или ширине:

JavaScript
1
2
3
4
5
function Collis(){
    if (player.attrs.y + speed < canvasHeight - 300) {
            player.setY(player.attrs.y + speed);
    }
}
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
05.04.2018, 15:07
Цитата Сообщение от Neznaikax Посмотреть сообщение
Управление клавиатурой.
У вас реализовано передвижение персонажа с помощью клавиатуры или только планируется?

Если есть такой код, то сделайте, чтобы работало на plnkr.co, codepen.io или jsfiddle.net

В общем, покажите весь код и чтобы было проще нам его понять и править. Перенесите его на любой онлайн ресурс и не забудьте продублировать код на форуме, потому что этого требуют правила форума.
0
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 14
05.04.2018, 19:38  [ТС]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="https://cdn.rawgit.com/konvajs/konva/2.0.2/konva.min.js"></script>
<script src="input.js"></script>
<script src="resources.js"></script>
</head>
 
<body>
 <div id="container">
 
 
 </div>
<canvas id="myCanvas"></canvas>
 
 
<script>
var speed = 5;
var canvasWidth = 900;//window.innerWidth;
var canvasHeight = 700;//window.innerHeight;
var direction = '';
var stage = new Konva.Stage({
    container: 'container',
    width: canvasWidth,
    height: canvasHeight
});
 
 
 
 
var layer = new Konva.Layer();
 
 
    
var animationsPlayer = {
  walkRight: [
    2, 131, 48, 49,
    58, 131, 48, 49,
    114, 131, 48, 49,
    170, 131, 48, 49,
    226, 131, 48, 49,
    282, 131, 48, 49,
    338, 131, 48, 49,
    394, 131, 48, 49,
    450, 131, 48, 49,
    506, 131, 48, 49,
    562, 131, 48, 49,
    618, 131, 48, 49,
    674, 131, 48, 49,
    730, 131, 48, 49,
    786, 131, 48, 49,
    842, 131, 48, 49,
    898, 131, 48, 49,
    954, 131, 48, 49
  ],
  walkLeft: [
    2, 191, 48, 49,
    58, 191, 48, 49,
    114, 191, 48, 49,
    170, 191, 48, 49,
    226, 191, 48, 49,
    282, 191, 48, 49,
    338, 191, 48, 49,
    394, 191, 48, 49,
    450, 191, 48, 49,
    506, 191, 48, 49,
    562, 191, 48, 49,
    618, 191, 48, 49,
    674, 191, 48, 49,
    730, 191, 48, 49,
    786, 191, 48, 49,
    842, 191, 48, 49,
    898, 191, 48, 49,
    954, 191, 48, 49
  ],
  idleRight: [
    2, 10, 48, 49,
    52, 10, 48, 49,
    102, 10, 48, 49,
    152, 10, 48, 49,
    202, 10, 48, 49,
    252, 10, 48, 49,
    302, 10, 48, 49,
    352, 10, 48, 49
  ],
  idleLeft: [
    2, 72, 48, 49,
    52, 72, 48, 49,
    102, 72, 48, 49,
    152, 72, 48, 49,
    202, 72, 48, 49,
    252, 72, 48, 49,
    302, 72, 48, 49,
    352, 72, 48, 49
  ]
 
};
 
    var playerImg = new Image();
    playerImg.src = 'wizard1.png';
    
    
    
/*  resources.load([
        'wizard.png',
        'wizard2.png'
    ]);
    resources.onReady(init);
    
    function init() {
        lastTime = Date.now(); // время запуска игры
        main();
    }
    
    function main() {
    
    }
    */
    
    
    
    
 // Объекты
 
 
    
var player = new Konva.Sprite({
    x: 200,
    y: 600,
    image: playerImg,
    animation: 'idleRight',
    animations: animationsPlayer,
    frameRate: 30,
    frameIndex: 0
});
 
// add the shape to the layer
layer.add(player);
 
// add the layer to the stage
stage.add(layer);
 
// start sprite animation
player.start();
     
    
// бесконечный цикл игры
var gameLoop = new Konva.Animation(function(frame) {
    handleInput();
    Collis();
}, layer);
gameLoop.start();
 
 
// отлавливание событий нажатия на "игровые" клавиши
function handleInput() {
 
    player.attrs.animation = 'idleRight';
    if (direction == 'left' || direction == 'down') {
        player.attrs.animation = 'idleLeft';
    }
 
    if(input.isDown('DOWN') || input.isDown('s')) {
        if (player.attrs.y + speed < canvasHeight - 48) {
            player.attrs.animation = 'walkRight';
            player.setY(player.attrs.y + speed);
            direction = 'down';
        }
    }
 
    if(input.isDown('UP') || input.isDown('w')) {
        if (player.attrs.y - speed > 0) {
            player.attrs.animation = 'walkLeft';
            player.setY(player.attrs.y - speed);
            direction = 'up';
        }
    }
 
    if(input.isDown('LEFT') || input.isDown('a')) {
        if (player.attrs.x - speed > -15) {
            player.attrs.animation = 'walkLeft';
            player.setX(player.attrs.x - speed);
            direction = 'left';
        }
    }
 
    if(input.isDown('RIGHT') || input.isDown('d')) {
        if (player.attrs.x + speed < canvasWidth - 35) {
            player.attrs.animation = 'walkRight';
            player.setX(player.attrs.x + speed);
            direction = 'right';
        }
    }
 
}
// Столкновение
function Collis(){
    if (player.attrs.y > canvasWidth ) {
        player.setY(player.attrs.y + speed);
    }
}
 
 
</script>
 
 
</body>
 
 
</html>
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
05.04.2018, 19:55
Вы не могли бы скинуть весь проект одним архивом, чтобы можно было запустить?

Добавлено через 3 минуты
Просто я вижу у вас ресурсы должны подгружаться, а без них не запустишь.
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
06.04.2018, 10:08
А я бы просто использовал красный цвет черты.
[HTML]
<canvas id='myCanvas' width='400' height='400'></canvas>
<canvas id='canvas' width='90' height='90'></canvas>
[HTML]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<script>
var x=100; var y=50; var k=1; k1=1;
var canvas2 = document.getElementById('canvas');
     var ctx = canvas2.getContext('2d');
ctx.beginPath(); ctx.strokeStyle = "rgb(0,255,0)";
    ctx.arc(45,45,10,0,Math.PI*2,true); 
    ctx.stroke();
function stt(){
var canvas=document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
kras=ctx.getImageData(0,0,400,400);
pix=kras.data;
canvas.width=canvas.width;
for(n=4,m=400*400*4;n<m;n+=4){pix[n]=255; pix[n+1]=255; pix[n+2]=255; pix[n+3]=255;}
var canvas=document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');  
    ctx.lineWidth = 5; 
    ctx.beginPath();
    ctx.drawImage(canvas2,x, y,150,150);
ctx.strokeStyle = "rgb(255,0,0)";
    ctx.moveTo(0,0);
    ctx.lineTo(400,380);
    ctx.lineTo(350,5);
    ctx.lineTo(0,0);
    ctx.stroke(); 
kras=ctx.getImageData(0,0,400,400);
pix=kras.data;
x+=k; y+=k1
for(n=0,m=400*400*4;n<m;n+=4){
if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n+8]==255)&&(pix[n+9]==0)&&(pix[n+10]==0)){k=-5; k1=0;
 n=m;}
if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n-8]==255)&&(pix[n-7]==0)&&(pix[n-6]==0)){k=1;
 n=m;}
 if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n+(800*4)]==255)&&(pix[n+(800*4)+1]==0)&&(pix[n+(800*4)+2]==0)){k1=-1; k=1; 
 n=m;}
if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n-(800*4)]==255)&&(pix[n-(800*4)+1]==0)&&(pix[n-(800*4)+2]==0)){k1=+1; k=1;
 n=m;}
  if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n+(800*4)+8]==255)&&(pix[n+(800*4)+9]==0)&&(pix[n+(800*4)+10]==0)){k1=1;
 n=m;}
 if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n+(800*4)-8]==255)
 &&(pix[n+(800*4)-7]==0)&&(pix[n+(800*4)-6]==0)){k1=-1; k=2;
 n=m;}
   if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n-3208]==255)&&(pix[n-3209]==0)&&(pix[n-3210]==0)){k1=1; k=1;
 n=m;}
 if((pix[n]==0)&&(pix[n+1]==255)&&(pix[n+2]==0)&&(pix[n-3192]==255)
 &&(pix[n-3193]==0)&&(pix[n-3194]==0)){k1=2;k=1;
 n=m;}
 }
setTimeout ('stt()',50);
}
stt();
</script>
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
06.04.2018, 11:53
Neznaikax, я бы вам посоветовал изучить туториал по игре Арканойд, где показаны основы детектирования столкновения объекта с блоками и ракеткой: 2D breakout game using pure JavaScript Тогда вам будет ясно, как обозначить прямоугольники вокруг ваших объектов, куда не должен заходить игрок: машины, дома - это всё прямоугольные объекты. В начале не нужно усложнять. Пройдите этот этап с минимальной затратой времени и сил. Потом, когда захотите непрямоугольные объекты, то вам уже будет проще сориентироваться
0
0 / 0 / 0
Регистрация: 31.10.2017
Сообщений: 14
06.04.2018, 13:12  [ТС]
Единственное, что я не могу понять. Как заключить координаты линии в переменную?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 223
07.04.2018, 08:22
Цитата Сообщение от Neznaikax Посмотреть сообщение
Как заключить координаты линии в переменную?
Я не смог понять ваш вопрос.

Добавлено через 18 часов 35 минут
Цитата Сообщение от Neznaikax Посмотреть сообщение
Единственное, что я не могу понять. Как заключить координаты линии в переменную?
Не нужны вам никакие линии. Вам нужны прямоугольники, у которых есть координата левого верхнего угла, ширина и высота. Вы не знаете, как определить попадает ли точка в прямоугольник?
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
08.04.2018, 03:09
А всё же, почему не использовать цвета? В этом коде я таскаю мышкой объект по вашему рисунку, разрешено таскать только по фону пола. Можете посмотреть работу кода
http://id190382234-0.myjino.ru/raznoe/1/GFGF.htm
Можно специально подготовить рисунки где разрешено ходить проставить прозрачность 254, и код будет совсем прост.
HTML5
1
2
3
4
5
6
<canvas id='myCanvas' width='900' height='700'></canvas>
<canvas id='kopi' width='900' height='700'></canvas>
<canvas id='canvas' width='40' height='50'></canvas>
<img id='im' src='neznaikax.png' style='display:none;'>
<div id='inf'>0</div>
<div style='text-align: center;  width:300px; cursor:pointer;background:#ddc;position:absolute;font-size:20px;top:0;left:0;'onclick="document.location='http://clecar.ru'">Мой сайт</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<script>var и=document.all;
var ne=0;   
и.im.onload=function(){    
var canvas=document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
    ctx.drawImage(и.im,0,0,900,700);
 
var canvas2 = document.getElementById('canvas');
     var ct = canvas2.getContext('2d');
tat=ct.getImageData(0,0,40,50);
var pux=tat.data; //массив пикселей объекта передвижения
tot=ctx.getImageData(40,470,40,50);
pix=tot.data;//массив пикселей объекта на картинке передвижения
for(s=0,d=50;s<d;s+=1){var o=0;
for(n=s*160, m=(s*160)+160; n<m; n+=4){
pux[n]=pix[n]; pux[n+1]=pix[n+1];pux[n+2]=pix[n+2]; pux[n+3]=255;
if((pix[n]==82)&&( pix[n+1]=89)&&(pix[n+2]=66)){pux[n+3]=0;}
pix[n]=82; pix[n+1]=89; pix[n+2]=66;//копирую оюъект с картинки и закрашиваю на рисунке его место.
}
}
ct.putImageData(tat, 0, 0);
ctx.putImageData(tot, 40, 470);
var can=document.getElementById('kopi');
var cx = can.getContext('2d');
    cx.drawImage(и.myCanvas,0,0,900,700);
и.kopi.style.display='none'
}
и.myCanvas.onmousemove=function(evt){
var canvas=document.getElementById('myCanvas');
var ctx = myCanvas.getContext('2d');
trt=ctx.getImageData(0,0,900,700);
pax=trt.data;
y=evt.clientY-30;
x=evt.clientX-25;
if(ne==1){и.myCanvas.width=и.myCanvas.width;
ctx.drawImage(и.kopi,0,0,900,700);
var t=0;
var u1=x*4+y*900*4;//левый верхний угол объекта
if((pax[u1-4]==82)&&( pax[u1-3]=89)&&(pax[u1-2]=66)){t++;}else{ne=0; x+=20;y+=20; }
var u2=(x+40)*4+(y+50)*900*4;//нижний правый
if((pax[u2+4]==82)&&( pax[u2+5]=89)&&(pax[u2+6]=66)){t++;}else{ne=0; x-=20; y-=20; }
var u3=(x+40)*4+y*900*4;//верхний правый
if((pax[u3+4]==82)&&( pax[u3+5]=89)&&(pax[u3+6]=66)){t++;}else{ne=0; x-=20;y+=20;}
if(t<2){x=390;y=500;}
и.inf.innerHTML=x+'--'+y+'--'+t;
ctx.drawImage(и.canvas,x,y,40,50);}
}   
onmouseup=function(){ne=0}  
onmousedown=function(){ne=1}
</script>
Добавлено через 19 минут
Объект появится если потянуть мышку с прижатой левой кнопкой по рисунку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2018, 03:09
Помогаю со студенческими работами здесь

В SML игре задать ограничение на выход объекта из границ
Всем привет! Пишу игру в Visual Studio. Библиотека SFML. Суть игры: У меня есть самолет, который двигаться влево и право, а с верху на него...

Ошибка 0x000000101 , при игре 10 минутной игре в Dota 2, CS:GO
Имя события проблемы: BlueScreen Версия ОС: 6.1.7600.2.0.0.256.48 Код языка: 1049 Дополнительные сведения об этой проблеме: ...

Как создать ограничение? Надо создать ограничение ввода букв, а то программа виснет!
var a:integer; begin repeat; writeln ('Введите число не равное еденице'); readln (a);

Как отлавливать нажатия клавиш в игре? Как их виртуально нажимать в игре?
Всем привет. Где-то месяц назад прочитал статью об каком-то парне, что сделал самообучающую программу для игр на Нинтендо. Но это вроде...

зоны
Есть сайт на российском хостинге, но домен в зоне ком. сайт русскоязычный. хоть какая-то разница есть по сравнению с зоной ру: при выдаче,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru