⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textcontrol.java

📁 国外人写的操作感挺好的一款滑雪游戏.结构也比较清楚
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
private static final int STRING_EASY = 84;
private static final int STRING_NORMAL = 85;
private static final int STRING_HARD = 86;
private static final int STRING_NATION0 = 87;
private static final int STRING_NATION1 = 88;
private static final int STRING_NATION2 = 89;
private static final int STRING_NATION3 = 90;
private static final int STRING_NATION4 = 91;
private static final int STRING_NATION5 = 92;
private static final int STRING_NATION6 = 93;
private static final int STRING_NATION7 = 94;
private static final int STRING_NATION8 = 95;
private static final int STRING_NATION9 = 96;
private static final int STRING_NATION10 = 97;
private static final int STRING_ATHLETE0 = 98;
private static final int STRING_ATHLETE1 = 99;
private static final int STRING_ATHLETE2 = 100;
private static final int STRING_ATHLETE3 = 101;
private static final int STRING_ATHLETE4 = 102;
private static final int STRING_ATHLETE5 = 103;
private static final int STRING_ATHLETE6 = 104;
private static final int STRING_ATHLETE7 = 105;
private static final int STRING_ATHLETE8 = 106;
private static final int STRING_ATHLETE9 = 107;
private static final int STRING_ATHLETE10 = 108;
private static final int STRING_GAME_TITLE = 109;
private static final int STRING_VERSION = 110;
private static final int STRING_COPYRIGHT_TEXT = 111;
private static final int STRING_CREDITS = 112;
private static final int STRING_SELECT_LANGUAGE = 113;
private static final int STRING_LANG0 = 114;
private static final int STRING_LANG1 = 115;
private static final int STRING_LANG2 = 116;
private static final int STRING_LANG3 = 117;
private static final int STRING_LANG4 = 118;
private static final int STRING_GAME_IN_PROGRESS = 119;
private static final int STRING_RESUME_GAME = 120;
private static final int STRING_ABORT_GAME = 121;
private static final int STRING_BACK = 122;
private static final int STRING_OK = 123;
private static final int STRING_CANCEL = 124;
private static final int STRING_MENU = 125;
private static final int STRING_LOADING = 126;
private static final int STRING_GUEST = 127;
private static final int STRING_LOGGING_IN = 128;
private static final int STRING_GAME_LOBBY = 129;
private static final int STRING_RATE_GAME = 130;
private static final int STRING_LEADERBOARD = 131;
private static final int STRING_REGISTER_ON = 132;
private static final int STRING_GAME_LOBBY_Q = 133;
private static final int STRING_TO_GAME_LOBBY = 134;
private static final int STRING_WELCOME = 135;
private static final int RESFILE_COMMON = 136;
private static final int RESFILE_COUNTRY = 137;
private static final int RESFILE_GFX = 138;
private static final int RESFILE_AUDIO = 139;



// defines from GameData
// we never have more than a few gates on the screen at once
// we're only going to store animation data for a few gates
// we'll pad it a bit to take into account the fact that the
// skier still moves while the gates animate.

//#ifdef _HIRES_GRAPHICS
////#define HURDLE_XOFF					12
////#define HURDLE_HEIGHT				31		// in pixels
////#define SHOOTINGREF_HEIGHT			54
////#define PIXEL_PER_M					24
////#define M_PER_PIXEL					2731
//#else
//#endif


//#define MAX_PLAYERS					4

//#ifndef _MAX_HUMAN_PLAYERS
//#endif



// Virtual key codes


// COLORS (RGB)







//#ifdef _LOW_DETAIL
//#else
////#define COLOR_SKY				0xc1ccf5
//#endif






//#ifdef _MULTI_LANG
////#define LANG_COUNT					5
//#else
//#endif


//#ifndef _LIMITED_EVENTS
//
////#define EVENT_SKI_JUMP				1
////#define EVENT_BIATHLON				2
////#define EVENT_SKIING				3
////#define EVENT_COUNT					4
////#define EVENT_COMPETITION			4
//
//#else


//#endif





//#ifdef _IS_NokiaS40
////	#define SOUND_COUNT				5
//#elif defined(_IS_NokiaS60) && !defined(_MMAPI)
////	#define SOUND_CROWD				5
////	#define SOUND_CRASH				6
////	#define SOUND_COUNT				7
//#elif defined(_LIMITED_SOUNDS)
////	#define SOUND_CRASH				5
////	#define SOUND_COUNT				6
//#else
//#endif


//#endif
//#ifdef _DEBUG
////#define DUMP_EXCEPTION(e)			{ //System.out.println( e.getMessage()); e.printStackTrace(); }
////#define DUMP_EXCEPTION_MSG(e,msg)	{ //System.out.println( msg + "\n" + e.getMessage()); e.printStackTrace(); }
////#define DEBUG_MSG(msg)				//System.out.println(msg)
//#else
//#endif

//#ifdef _PROFILE
////#define START_TIMER(a)				a = System.currentTimeMillis();
////#define STOP_TIMER(a)				a = System.currentTimeMillis() - a;
//#else
//#endif



	public final static int RESIZE_LEFT = 0;
	public final static int RESIZE_CENTERED = 1;
	public final static int FULL_SCROLL = 2;
	
	private final static int MAX_LINES = 100;

	//********************************************************************
	private final static int	INVALID_PAGE = -1;
	
	private Window				m_page;
	private int					m_iCurrentPage;
	private int					m_iPageCount;
	private int					m_iLineCount;
	private int					m_iTextWidth;
	private int					m_iTextColor;
	private int					m_iTextStyle;
	private int					m_iType;
	private String				m_asTextLines[] = new String[MAX_LINES];
	private int					m_aiStartLines[] = new int[MAX_LINES];
	//********************************************************************
	
	public TextControl( TorinoCanvas canvas )
	{
		super( canvas );
	}	
	
	public void init( String sText, int iType, int iTextStyle, int iTextColor ) throws IOException
	{
		m_iTextColor = iTextColor;
		m_iType = iType;
		m_iTextStyle = iTextStyle;
		
		m_iTextWidth = m_iWidth;
		switch (m_iType)
		{
		case RESIZE_LEFT:
		case RESIZE_CENTERED:
			m_iTextWidth -= 4;
			break;
		case FULL_SCROLL:
			m_iTextWidth -= 7/*@ARROW_WIDTH*/ + 6;
			break;
		}

		m_iLineCount = 0;

		// split the text
		String sTemp = null;
		String sPara = new String(sText);
		int index1 = -1;
		int iBreak = -1;
	
		iBreak = sPara.indexOf( '$' );
		while ( m_canvas.m_menuFont.stringWidth( sPara ) > m_iTextWidth || iBreak != -1)
		{
			int iStart = 0;
			int iEnd = 0;
	
			while ( m_canvas.m_menuFont.substringWidth( sPara, 0, iEnd ) <= m_iTextWidth 
				&& (iBreak == -1 || iBreak >= iStart ))
			{
				iStart = iEnd;
				index1 = sPara.indexOf( ' ', iStart );
				if (index1 == -1 && iBreak == -1)
					iEnd = sPara.length();
				else if ( iBreak >= 0 && iBreak < index1 )
					iEnd = iBreak+1;
				else
					iEnd = index1+1;
			}
	
			if (iStart == 0)
				iStart = iEnd;
			sTemp = sPara.substring( 0, iStart-1 );
			m_asTextLines[m_iLineCount] = sTemp;
			m_iLineCount++;
			if (iStart < sPara.length())
				sPara = sPara.substring( iStart );
				
			iBreak = sPara.indexOf( '$' );
		}
	
		if ( sPara.length() > 0 )
		{
			m_asTextLines[m_iLineCount] = sPara;
			m_iLineCount++;
		}
		
		m_aiStartLines[0] = 0;
		m_iPageCount = 1;
		
		if ( m_iType == FULL_SCROLL )
		{
			int iFontHeight = m_canvas.m_menuFont.getHeight()+2;
//#ifdef _IS_NOKIA
			// HACK! - The Nokia 7210 incorrectly returns 9 for the
			// height of the small font, when it should be 12.
			// If you give us back a number this low, we think you're lying
			if (iFontHeight < 14)
				iFontHeight = 14;
//#endif
			int iLines = (m_iHeight+(-3)/*@FONT_PADDING*/)/(iFontHeight+(-3)/*@FONT_PADDING*/);
			while(true)
			{
				if (m_iLineCount - m_aiStartLines[m_iPageCount-1] <= iLines)
					break;
				else
				{
					m_aiStartLines[m_iPageCount] = m_aiStartLines[m_iPageCount-1] + iLines - 1;
					m_iPageCount++;
				}			
			}
		}
				
		m_iCurrentPage = INVALID_PAGE;
		setPage( 0 );

		if ( m_iType == RESIZE_LEFT || m_iType == RESIZE_CENTERED )
		{
			// resize
			int iWidth = m_iWidth;
			sizeToChildren();
			setDimensions( iWidth, m_iHeight );
		}
	}
	
	public void setPage( int iPage ) throws IOException
	{
		if (iPage < 0 || iPage >= m_iPageCount || iPage == m_iCurrentPage)
			return;
	
		if (m_page != null)
		{
			remove(m_page);
			m_page = null;
		}
	
		m_page = new Window( m_canvas );
		m_page.m_iContainerType = CONTAINER_SHELF;
		m_page.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_MIDDLE );
		m_page.setDimensions( m_iWidth-4, m_iHeight );
		m_page.setPadding(2);
		addToFront( m_page );
	
		Window stack = new Window( m_canvas );
		stack.m_iContainerType = CONTAINER_STACK;
		stack.setAlignment( Drawable.ALIGNV_MIDDLE );
		stack.setDimensions( m_iTextWidth, m_iHeight );
		stack.setPadding((-3)/*@FONT_PADDING*/);
		m_page.addToBack( stack );
	
		// create labels and stack them
		int iLine = m_aiStartLines[iPage];
		int iEnd;
		if (iPage==m_iPageCount-1)
			iEnd = m_iLineCount;
		else
			iEnd = m_aiStartLines[iPage+1] + 1;
	    while ( iLine < iEnd )
		{
			// create a label and add it to the stack
			Label label = new Label(m_canvas.m_menuFont,0,0,0,m_iTextColor,0x000000/*@COLOR_BLACK*/,m_iTextStyle);
			label.setAlignment( (m_iType == RESIZE_CENTERED)?Drawable.ALIGNH_CENTER:Drawable.ALIGNH_LEFT );
			stack.addToBack( label );
			label.setText( m_asTextLines[iLine] );
			iLine++;
		}
	
		// add arrows if necessary
		if (m_iPageCount > 1 && m_iType == FULL_SCROLL)
		{
			Window container = new Window( m_canvas );
			container.setDimensions(m_page.m_iWidth-m_iTextWidth,m_page.m_iHeight - 4);
			container.setAlignment( Drawable.ALIGNV_MIDDLE );
			m_page.addToBack( container );
	
//#ifdef _DRAW_PIXELS_SUPPORT
//			short[] image = TorinoCanvas.loadPackedPalPixels( RESFILE_MENU, 6/*@RES_ARROWSUD*/,
//				RESFILE_MENU, 6/*@RES_ARROWSUD*/+1 );
//#else
			Image image = TorinoCanvas.loadPackedImage( RESFILE_COMMON, 6/*@RES_ARROWSUD*/ );
//#endif
			if (iPage > 0)
			{
				Sprite arrow = new Sprite( image, 7/*@ARROW_WIDTH*/, 5/*@ARROW_HEIGHT*/ );
				arrow.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_TOP );
				container.addToFront( arrow );
			}
	
			if (iPage < m_iPageCount-1)
			{
				Sprite arrow = new Sprite( image, 7/*@ARROW_WIDTH*/, 5/*@ARROW_HEIGHT*/ );
				arrow.setFrame(1);
				arrow.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_BOTTOM );
				container.addToFront( arrow );
			}
		}
		else if ( m_iType == RESIZE_LEFT || m_iType == RESIZE_CENTERED )
		{
			stack.sizeToChildren();
			stack.setDimensions( m_iTextWidth, stack.m_iHeight );
	
			m_page.sizeToChildren();
			m_page.setDimensions( m_iWidth-4, m_page.m_iHeight );
		}
	
		m_iCurrentPage = iPage;
	}
	
	public void nextPage() throws IOException
	{
		if (m_iCurrentPage < m_iPageCount-1)
			setPage( m_iCurrentPage+1 );
	}
	
	public void prevPage() throws IOException
	{
		if (m_iCurrentPage > 0)
			setPage( m_iCurrentPage-1 );
	}
}

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -