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 + -
显示快捷键?