Tanks JS1K

Кстати о JavaScript. Может быть кто-то из читатей помнит, под Новый год мы с LO развлекались тем, что уменьшали мою игру про танк, воюющий с ракетами, чтобы она занимала как можно меньше места.

Не так давно мне почему-то вспомнилась эта игрушка и я посмотрел нельзя ли там что-то ещё уменьшить, свежим взглядом так сказать. Оказалось можно. У меня была старая идея переделать координатную адресацию, но я её забросил, лениво. Зато придумал кое-что новенькое, что пригодится не только в этой игрушке.

Мне очень хотелось сократить названия методов канваса, очень уж они длинные — putImageData, createImageData и так далее. Для игры, занимающей (сейчас) 713 байт это расточительно. На эту тему в голову идея и пришла.

Идея заключается в том, чтобы пройтись по списку методов и присвоить объекту их же, но под другими, короткими именами. Самый простой способ, до которого я додумался — это взять пятую букву названия метода (правда, кажется a[i] для строк не везде будет работать, вариант с charAt занимает на 7 байт больше).

Получился такой код:
for(i in a)a[i[V=4]]=a[i]
Переменная «V» со значением «четыре» используется дальше как счётчик оставшихся жизней, в переменной «a» ссылка на объект контекста канваса. В итоге, если мне надо вызывать метод «a.putImageData», я могу вызвать его как «a.m», вместо «a.createImageData» можно вызывать «a.t» и так далее (отчёт с нуля начинается).

Чем больше таких вызовов, тем больше экономия. Единственное, свойства (например «fillStyle») так сократить не получится.
1 июня 2011 14:49

LO (инкогнито)
1 июня 2011, 17:28

Обязательно скоро посмотрю на все это своим "свежим взглядом", возможно, в ближайшие выходные. Теперь мяч на моей стороне.
Я сейчас отхожу от другого похожего батла - минимизировать энкодер в base64 до размера, не превышающего 140 байт.

http://sla.ckers.org/forum/read.php?24,36342

И до сих пор там ситуация до конца не ясна.

bolk (bolknote.ru)
1 июня 2011, 21:49, ответ предназначен LO

Круто, ок!

Надо бы, конечно, что-то новое забацать.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)