tilemapkeylistener.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 74 行
JAVA
74 行
/************************************************************
*
* Copyright (c) 2003 Chemi. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the MIT License
* which accompanies this distribution, and is available at
* http://www.opensource.org/licenses/mit-license.html
*
************************************************************/
package es.org.chemi.games.sokoban.events;
import net.sf.pim.game.util.DiamondMap;
import net.sf.pim.game.util.DiamondMap.IsoDirection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import es.org.chemi.games.sokoban.SokobanPlugin;
import es.org.chemi.games.sokoban.ui.Tile;
import es.org.chemi.games.sokoban.ui.TileMap;
import es.org.chemi.games.sokoban.util.Constants;
import es.org.chemi.games.util.Timer;
public class TileMapKeyListener extends KeyAdapter
{
private TileMap map = null;
public TileMapKeyListener(TileMap map)
{
this.map = map;
}
public void keyPressed(KeyEvent ev)
{
boolean key3DMode = map.getPreferences().isKey3DEnabled();
//两套按键方案:只有向上键移动,左右键换方向,向下键反身
if(ev.keyCode == SWT.ARROW_RIGHT || ev.character == Character.toLowerCase('d'))
if(key3DMode)changeDirection(-1); else move( IsoDirection.NORTH_EAST);
else if(ev.keyCode == SWT.ARROW_LEFT || ev.character == Character.toLowerCase('a'))
if(key3DMode)changeDirection(1);else move(IsoDirection.SOUTH_WEST);
else if(ev.keyCode == SWT.ARROW_UP || ev.character == Character.toLowerCase('w'))
if(key3DMode)move(map.getBoyTile().getDirection());else move(IsoDirection.NORTH_WEST);
else if(ev.keyCode == SWT.ARROW_DOWN || ev.character == Character.toLowerCase('s'))
if(key3DMode)changeDirection(-99);else move(IsoDirection.SOUTH_EAST);
else if(ev.character == Character.toLowerCase('p'))
{
((Timer)map.getCounters().get(Constants.COUNTER_TIME)).stop();
map.getPauseAction().setIsGamePaused(true);
}
}
//改变小人的方向
private void changeDirection(int delta) {
IsoDirection direction=map.getBoyTile().getDirection();
direction = DiamondMap.changeDirection(delta, direction);
Tile tile=map.getBoyTile();
tile.setModified(true);
if(tile.isHole())
MoveHelper.setTileHoleImage(tile, direction);
else
MoveHelper.setTileImage(tile, direction);
map.redraw();
// Play sound.
if(map.getPreferences().isSoundEnabled())
SokobanPlugin.getResourceManager().getSound(Constants.SOUND_MOVE).play();
}
public void move(IsoDirection direction) {
new MoveHelper(map).move(direction);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?