Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.06.2017, 11:57
Кандидат Javascript-наук
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 106

Как это написать на TypeScript ?
Есть код на js
без ООП, класов и т.п.
https://codepen.io/anon/pen/werXdL
Его надо перевести в TypeScript, используя интерфейсы и классы

У меня получилось вот так:
Мячик появляется на поле, но почему то не движется
Я думаю дело в методе move (на 32 строке) - видимо как-то не так его написал
interface Moveable {
    getPos(): void;
    move(): void;
}

class Ball implements Moveable {
    private _field: HTMLElement;
    private _ball: any;
    private _height: number = 500;
    private _width: number = 500;
    private _size: number = 40;
    private _S: number = 10;
    private _pos: any;

    constructor() {
        this._field = <HTMLElement>document.querySelector('.container');
        this._ball = document.createElement('div');
        this._field.appendChild(this._ball);
        this._ball.classList.add('ball');
        this._ball.style.width = this._size + 'px';
        this._ball.style.height =  this._size + 'px';
        this._ball.style.top = ( Math.random() * (this._height - this._size) ) + 'px';
        this._ball.style.left = ( Math.random() * (this._width - this._size) ) + 'px';
        this._ball.direction = Math.random() * 3.14;
    }
    getPos() {
        this._pos = this._ball.getBoundingClientRect();
        this._ball.realTop = this._pos.top;
        this._ball.realLeft = this._pos.left;
        
    }
    public move(): void {
        this._ball.realTop += Math.sin(this._ball.direction) * this._S;
        this._ball.realLeft += Math.cos(this._ball.direction) * this._S;

        if (this._ball.realTop + this._size > this._height || 
            this._ball.realLeft + this._size > this._width || 
            this._ball.realTop < 0 || this._ball.realLeft < 0) {

            this._ball.direction += Math.PI / 2;
            return this.move();
        }
        this._ball.style.top = this._ball.realTop + "px";
        this._ball.style.left = this._ball.realLeft + "px";
    }
}
let ball = new Ball();
setInterval(ball.move.bind(ball), 17);

Последний раз редактировалось yaparoff, 26.06.2017 в 12:03.
Ответить с цитированием
  #2 (permalink)  
Старый 26.06.2017, 13:15
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

yaparoff,
Вы скорее всего уже разобрались, но напишу. В оригинале код функции getPos вызывается в конструкторе. Вы же не вызываете. Ну и функция которая называется getPos и возвращает void вызывает легкое недоумение, учитывая что она публичная.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать легкий скрипт для chroma sasha561 Общие вопросы Javascript 4 12.07.2015 21:38
как проверить, что введенные пользователем цифры - это действительно цифры? sana Общие вопросы Javascript 7 31.03.2015 21:16
Индексация AJAX сайтов - Как это работает? byFahrenheit AJAX и COMET 4 21.02.2013 17:09
Как написать цыкл each serhanters jQuery 7 24.04.2011 11:16
1092*0.15=? А на javascript? Как это объяснить бухгатеру? oid Общие вопросы Javascript 15 24.10.2009 12:51