• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czym da się zastąpić "selected"?

Object Storage Arubacloud
0 głosów
373 wizyt
pytanie zadane 22 czerwca 2015 w JavaScript przez LogicznyMat Użytkownik (940 p.)

Witam,

Jest jakiś sposób na zastąpienie selected?

Głównie chodzi mi o:

if (cursor.selected) {}

 

2 odpowiedzi

0 głosów
odpowiedź 22 czerwca 2015 przez Comandeer Guru (601,110 p.)

Pewnie jakiś jest. Pytania brzmią:

  • co ten kod robi?
  • czym jest cursor?

http://roberto.ovh.org/pomoc.html

komentarz 22 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)
jewel.screens["game-screen"] = (function() {
    var firstRun = true,
        paused,
        pauseStart,
        cursor,
        gameState = {
        };

    function startGame() {
        var board = jewel.board,
            display = jewel.display;
        gameState = {
            level : 0,
            score : 0,
            timer : 0, 
            startTime : 0, 
            endTime : 0 
        };
        updateGameInfo();
        board.initialize(function() {
            display.initialize(function() {
                cursor = {
                    x : 0,
                    y : 0,
                    selected : false
                };
                display.redraw(board.getBoard(), function() {
                    advanceLevel();
                });
            });
        });
        paused = false;
        var overlay = jewel.dom.$("#game-screen .pause-overlay")[0];
        overlay.style.display = "none";
    }

    function updateGameInfo() {
        var $ = jewel.dom.$;
        $("#game-screen .score span")[0].innerHTML =
            gameState.score;
        $("#game-screen .level span")[0].innerHTML =
            gameState.level;
    }


    function setLevelTimer(reset) {
        var $ = jewel.dom.$;
        if (gameState.timer) {
            clearTimeout(gameState.timer);
            gameState.timer = 0;
        }
        if (reset) {
            gameState.startTime = Date.now();
            gameState.endTime =
                jewel.settings.baseLevelTimer *
                Math.pow(gameState.level, 
                         -0.05 * gameState.level);
        }
        var delta = gameState.startTime +
                    gameState.endTime - Date.now(),
            percent = (delta / gameState.endTime) * 100,
            progress = $("#game-screen .time .indicator")[0];
        if (delta < 0) {
            gameOver();
        } else {
            progress.style.width = percent + "%";
            gameState.timer = setTimeout(setLevelTimer, 30);
        }
    }

    function setCursor(x, y, select) {
        cursor.x = x;
        cursor.y = y;
        cursor.selected = select;
        jewel.display.setCursor(x, y, select);
    }
    
    function selectJewel(x, y) {
        if (paused) {
            return;
        }
        if (arguments.length === 0) {
            selectJewel(cursor.x, cursor.y);
            return;
        }
        if (cursor.selected) {
            var dx = Math.abs(x - cursor.x),
                dy = Math.abs(y - cursor.y),
                dist = dx + dy;

            if (dist === 0) {
                setCursor(x, y, false);
            } else if (dist === 1) {
                jewel.board.swap(cursor.x, cursor.y, 
                    x, y, playBoardEvents);
                setCursor(x, y, false);
            } else {
                setCursor(x, y, true);
            }
        } else {
            setCursor(x, y, true);
        }
    }

    function playBoardEvents(events) {
        var display = jewel.display;
        if (events.length > 0) {
            var boardEvent = events.shift(),
                next = function() {
                    playBoardEvents(events);
                };
            switch (boardEvent.type) {
                case "move" :
                    display.moveJewels(boardEvent.data, next);
                    break;
                case "remove" :
                    display.removeJewels(boardEvent.data, next);
                    break;
                case "refill" :
                    announce("No moves!");
                    display.refill(boardEvent.data, next);
                    break;
                case "score" : 
                    addScore(boardEvent.data);
                    next();
                    break;
                default :
                    next();
                    break;
            }
        } else {
            display.redraw(jewel.board.getBoard(), function() {
            });
        }
    }

    function gameOver() {
        jewel.display.gameOver(function() {
            announce("Koniec gry");
        });
    }

    function addScore(points) {
        var settings = jewel.settings,
            nextLevelAt = Math.pow(
                settings.baseLevelScore,
                Math.pow(settings.baseLevelExp, gameState.level-1)
            );
        gameState.score += points;
        if (gameState.score >= nextLevelAt) {
            advanceLevel();
        }
        updateGameInfo();
    }
    
    function advanceLevel() {
        gameState.level++;
        announce("Level " + gameState.level);
        updateGameInfo();
        gameState.startTime = Date.now();
        gameState.endTime = jewel.settings.baseLevelTimer *
            Math.pow(gameState.level, -0.05 * gameState.level);
        setLevelTimer(true);
        jewel.display.levelUp();
    }

    function announce(str) {
        var dom = jewel.dom,
            $ = dom.$,
            element = $("#game-screen .announcement")[0];
        element.innerHTML = str;
        dom.removeClass(element, "zoomfade");
        setTimeout(function() {
            dom.addClass(element, "zoomfade");
        }, 1);
    }

    function moveCursor(x, y) {
        if (paused) {
            return;
        }
        var settings = jewel.settings;
        if (cursor.selected) {
            x += cursor.x;
            y += cursor.y;
            if (x >= 0 && x < settings.cols &&
                y >= 0 && y < settings.rows) {
                selectJewel(x, y);
            }
        } else {
            x = (cursor.x + x + settings.cols) % settings.cols;
            y = (cursor.y + y + settings.rows) % settings.rows;
            setCursor(x, y, false);
        }
        console.log("Cursor position: " + x + ", " + y);
    }

    function pauseGame() {
        if (paused) {
            return; 
        }
        var dom = jewel.dom,
            overlay = dom.$("#game-screen .pause-overlay")[0];
        overlay.style.display = "block";
        paused = true;
        pauseStart = Date.now();
        clearTimeout(gameState.timer);
        jewel.display.pause();
    }

    function moveUp() {
        moveCursor(0, -1);
    }

    function moveDown() {
        moveCursor(0, 1);
    }

    function moveLeft() {
        moveCursor(-1, 0);
    }

    function moveRight() {
        moveCursor(1, 0);
    }

    function resumeGame() {
        var dom = jewel.dom,
            overlay = dom.$("#game-screen .pause-overlay")[0];
        overlay.style.display = "none";
        paused = false;
        var pauseTime = Date.now() - pauseStart;
        gameState.startTime += pauseTime;
        setLevelTimer();
        jewel.display.resume(pauseTime);
    }
    
    function exitGame() {
        pauseGame();
        var confirmed = window.confirm(
            "Chcesz wrócić do głównego menu?"
        );
        if (confirmed) {
            jewel.showScreen("main-menu");
        } else {
            resumeGame();
        }
    }

    function setup() {
        var dom = jewel.dom;
        dom.bind("footer button.exit", "click", exitGame);
        dom.bind("footer button.pause", "click", pauseGame);
        dom.bind(".pause-overlay", "click", resumeGame);

        var input = jewel.input;
        input.initialize();
        input.bind("selectJewel", selectJewel);
        input.bind("moveUp", moveUp);
        input.bind("moveDown", moveDown);
        input.bind("moveLeft", moveLeft);
        input.bind("moveRight", moveRight);
    }

    function run() {
        if (firstRun) {
            setup();
            firstRun = false;
        }
        startGame();
    }

    return {
        run : run
    };
})();

Kod wykonuje pojawienie się ekranu gry i mechaniki,

Cursor zwraca położenie kursora

komentarz 22 czerwca 2015 przez Comandeer Guru (601,110 p.)
A w gruncie rzeczy czemu chcesz ten fragment zmienić? Co chcesz osiągnąć?
komentarz 22 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)
Skrypt się nie wyświetla, po zbadaniu elementu w konsoli przeglądarki pisze:

screen.game.js:86Uncaught TypeError: Cannot read property "selected" of undefined (repeadet 2 times)
komentarz 22 czerwca 2015 przez Comandeer Guru (601,110 p.)
Masz to gdzieś online? Bo tak na oko przy tym kodzie taki błąd nie powinien zostać rzucony.
komentarz 22 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)
Nie mam tego online
komentarz 22 czerwca 2015 przez Comandeer Guru (601,110 p.)
A zip? Bo z tego kodu nic nie wynika i problem będzie pewnie w miejscu integracji z innymi modułami.
komentarz 22 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)
mam .zip gdzie mam to wysłać? Na wiad. priv?
komentarz 22 czerwca 2015 przez Comandeer Guru (601,110 p.)
Chyba tak będzie najlepiej
0 głosów
odpowiedź 22 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
Opisz dokładniej w czym problem i w jaki sposób chcesz to wykorzystać.
komentarz 22 czerwca 2015 przez LogicznyMat Użytkownik (940 p.)
Skrypt się nie wyświetla, po zbadaniu elementu w konsoli przeglądarki pisze:

screen.game.js:86Uncaught TypeError: Cannot read property "selected" of undefined (repeadet 2 times)

Podobne pytania

0 głosów
3 odpowiedzi 1,144 wizyt
pytanie zadane 12 października 2018 w JavaScript przez Szycha Gaduła (4,650 p.)
0 głosów
1 odpowiedź 224 wizyt
0 głosów
2 odpowiedzi 790 wizyt
pytanie zadane 28 stycznia 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

92,566 zapytań

141,420 odpowiedzi

319,604 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...