public void runonce() { // rotate left if (fKeyLeft) { if ((fPlayerArc -= ANGLE10) < ANGLE0) { fPlayerArc += ANGLE360; } } // rotate right else if (fKeyRight) { if ((fPlayerArc += ANGLE10) >= ANGLE360) { fPlayerArc -= ANGLE360; } } // _____ _ // |\ arc | // | \ y // | \ | // - // |--x--| // // sin(arc)=y/diagonal // cos(arc)=x/diagonal where diagonal=speed double playerXDir = fCosTable[fPlayerArc]; double playerYDir = fSinTable[fPlayerArc]; // move forward if (fKeyUp) { fPlayerX += (int)(playerXDir * fPlayerSpeed); fPlayerY += (int)(playerYDir * fPlayerSpeed); } // move backward else if (fKeyDown) { fPlayerX -= (int)(playerXDir * fPlayerSpeed); fPlayerY -= (int)(playerYDir * fPlayerSpeed); } // get walls ClipPlayer(); showStatus(CurrentMapPosition.ToString()); //render(); }
//*******************************************************************// //* Running thread //*******************************************************************// public void run() { requestFocus(); // create offscreen buffer fOffscreenImage = createImage(getSize().width, getSize().height); fOffscreenGraphics = fOffscreenImage.getGraphics(); while (fThread != null) { // rotate left if (fKeyLeft) { if ((fPlayerArc -= ANGLE10) < ANGLE0) { fPlayerArc += ANGLE360; } } // rotate right else if (fKeyRight) { if ((fPlayerArc += ANGLE10) >= ANGLE360) { fPlayerArc -= ANGLE360; } } // _____ _ // |\ arc | // | \ y // | \ | // - // |--x--| // // sin(arc)=y/diagonal // cos(arc)=x/diagonal where diagonal=speed double playerXDir = fCosTable[fPlayerArc]; double playerYDir = fSinTable[fPlayerArc]; // move forward if (fKeyUp) { fPlayerX += (int)(playerXDir * fPlayerSpeed); fPlayerY += (int)(playerYDir * fPlayerSpeed); } // move backward else if (fKeyDown) { fPlayerX -= (int)(playerXDir * fPlayerSpeed); fPlayerY -= (int)(playerYDir * fPlayerSpeed); } // get walls ClipPlayer(); showStatus(CurrentMapPosition.ToString()); render(); try { Thread.sleep(50); } catch //(System.Exception sleepProblem) { showStatus("Sleep problem"); } } }