J2ME中使用Canvas制作簡(jiǎn)單的游戲菜單_JSP教程
推薦:Struts構(gòu)架中的Session對(duì)象創(chuàng)建和控制 首先談一下對(duì)session對(duì)象在web開發(fā)中的創(chuàng)建以及sessionId生成并返回客戶端的運(yùn)行機(jī)制. session對(duì)象當(dāng)客戶端首次訪問時(shí),創(chuàng)建一個(gè)新的session對(duì)象.并同時(shí)生成一個(gè)sessionId,并在此
我們知道MIDP的圖形用戶界面分為兩類,分別是高級(jí)圖形用戶界面和低級(jí)用戶界面。一般來講高級(jí)圖形用戶界面類使用起來比較方便,可移植性強(qiáng),但是程序員對(duì)他的控制能力也很低,因?yàn)樗鼈兊慕缑姹憩F(xiàn)是由底層控制的,而不是我們控制的。相比高級(jí)UI類,低級(jí)UI類則使用起來更難一些,但是控制能力更強(qiáng),可以做出自己需要的界面。
Canvas和Graphics是我們必須熟練使用的兩個(gè)類,分別代表了畫布和畫筆(事實(shí)上更豐富,姑且這么比喻)。而我們則是畫畫的人,而指導(dǎo)我們?nèi)绾蜗鹿P的就是java doc了,再加上勤奮努力一定可以畫出不錯(cuò)的界面。比如tabbed菜單,二級(jí)菜單等。這里我們講述一個(gè)簡(jiǎn)單菜單的制作方式。
在畫菜單的時(shí)候,需要考慮兩面的問題,第一是計(jì)算相對(duì)位置,讓菜單能夠盡可能適應(yīng)更多的機(jī)型,盡量少使用絕對(duì)值。例如畫下面的菜單的時(shí)候
我們應(yīng)該計(jì)算菜單的每個(gè)條目的高度,這些可以有Font的高度算出,當(dāng)然你可以給條目留一些padding的距離。還應(yīng)該計(jì)算條目的最寬值,畢竟每個(gè)條目的字?jǐn)?shù)不一樣。這樣基本知道了整個(gè)菜單占的空間。最后還需要計(jì)算菜單在屏幕的位置。菜單的繪制如下所示:
public void paint(Graphics g){
//清除屏幕
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
//計(jì)算整個(gè)菜單的高度,寬度和(x,y)
int rectWidth = preferWidth;
int rectHeight = preferHeight * LABELS.length;
int x = (getWidth()-rectWidth)/2;
int y = (getHeight()-rectHeight)/2;
//畫矩形
g.drawRect(x,y,rectWidth,rectHeight);
for(int i = 1;i
}
//畫菜單選項(xiàng),并根據(jù)selected的值判斷焦點(diǎn)
for(int j = 0;j
g.setColor(0x6699cc);
g.fillRect(x 1,y j*preferHeight 1,rectWidth-1,preferHeight-1);
g.setColor(color);
}
g.drawString(LABELS[j],x 8,y j*preferHeight 4,Graphics.LEFT|Graphics.TOP);
}
}
第二個(gè)重要的問題是:焦點(diǎn)的切換,在高級(jí)UI類中,這是不需要我們處理的。但是使用Canvas制作菜單需要自己來處理焦點(diǎn)的移動(dòng),這里我們定義一個(gè)int類型變量selected,來記錄焦點(diǎn)所在的菜單條目位置,也就是選擇的索引。當(dāng)用戶按鍵的時(shí)候,我們?cè)趉eyPressed()方法中判斷用戶的移動(dòng)方向,對(duì)selected進(jìn)行相關(guān)的加減運(yùn)算,然后repaint()整個(gè)屏幕即可。
public void keyPressed(int keyCode){
//根據(jù)用戶輸入更新selected的值,并重新繪制屏幕
int action = this.getGameAction(keyCode);
switch(action){
case Canvas.FIRE:
printLabel(selected);
break;
case Canvas.DOWN:
selected = (selected 1)%4;
break;
case Canvas.UP:{
if(--selected < 0){
selected =4;
}
break;
}
default:
break;
}
repaint();
serviceRepaints();
}
這樣我們就制作出了一個(gè)基本的菜單,你還可以發(fā)揮想象給被選中的菜單增加動(dòng)畫效果。MenuCanvas的代碼如下所示:
package com.j2medev.chapter3;
import javax.microedition.lcdui.*;
public class MenuCanvas extends Canvas{
//selected變量標(biāo)記了焦點(diǎn)位置
private int selected = 0;
private int preferWidth = -1;
private int preferHeight = -1;
public static final int[] OPTIONS = {0,1,2,3};
public static final String[] LABELS={"New Game","Setttings","High Scores","Exit"};
public MenuCanvas() {
selected = OPTIONS[0];
//計(jì)算菜單選項(xiàng)的長(zhǎng)度和高度值
Font f = Font.getDefaultFont();
for(int i = 0;i
if(temp > preferWidth){
preferWidth = temp;
}
}
preferWidth = preferWidth 2*8;
preferHeight = f.getHeight() 2*4;
}
public void paint(Graphics g){
//清除屏幕
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
//計(jì)算整個(gè)菜單的高度,寬度和(x,y)
int rectWidth = preferWidth;
int rectHeight = preferHeight * LABELS.length;
int x = (getWidth()-rectWidth)/2;
int y = (getHeight()-rectHeight)/2;
//畫矩形
g.drawRect(x,y,rectWidth,rectHeight);
for(int i = 1;i
}
//畫菜單選項(xiàng),并根據(jù)selected的值判斷焦點(diǎn)
for(int j = 0;j
g.setColor(0x6699cc);
g.fillRect(x 1,y j*preferHeight 1,rectWidth-1,preferHeight-1);
g.setColor(color);
}
g.drawString(LABELS[j],x 8,y j*preferHeight 4,Graphics.LEFT|Graphics.TOP);
}
}
public void keyPressed(int keyCode){
//根據(jù)用戶輸入更新selected的值,并重新繪制屏幕
int action = this.getGameAction(keyCode);
switch(action){
case Canvas.FIRE:
printLabel(selected);
break;
case Canvas.DOWN:
selected = (selected 1)%4;
break;
case Canvas.UP:{
if(--selected < 0){
selected =4;
}
break;
}
default:
break;
}
repaint();
serviceRepaints();
}
//showNotify()在paint()之前被調(diào)用
public void showNotify(){
System.out.println("showNotify() is called");
}
private void printLabel(int selected){
System.out.println(LABELS[selected]);
}
}
分享:讓不同的Servlet在一個(gè)Session共享連接==== 問題所在 ==== 如果要編寫一個(gè)購(gòu)物車,通常需要寫很多個(gè)不同功能的servlet。例如用戶登錄、添加商品、查詢購(gòu)物車、結(jié)帳等。 在這些 servlet 中都需要讀寫數(shù)據(jù)庫(kù)。如果我們?cè)诿總(gè)
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
- JSP內(nèi)置對(duì)象:Request和Response的簡(jiǎn)單介紹及使用
- 解析簡(jiǎn)單計(jì)數(shù)器的并發(fā)問題
- 實(shí)例解析Java/JSP中調(diào)用SQL Server存儲(chǔ)過程
- 揭秘學(xué)習(xí)Java必須了解的30個(gè)基本概念
- JSP動(dòng)態(tài)網(wǎng)頁入門表單輸入例子
- J2ME開發(fā)工具EclipseME 1.2.1新版發(fā)布
- 如何通用數(shù)據(jù)庫(kù)jsp分頁查詢模塊
- 詳解學(xué)習(xí)JSP中標(biāo)簽庫(kù)
- jsp簡(jiǎn)單自定義標(biāo)簽的forEach遍歷及轉(zhuǎn)義字符
- 淺析JSP分頁教程
- 相關(guān)鏈接:
- 教程說明:
JSP教程-J2ME中使用Canvas制作簡(jiǎn)單的游戲菜單
。