涓涓狫2ME鐨?D娓告垙鎶鏈疍EMO聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
婧愮爜璁″垝浜嗗緢涔呬簡錛屽噯澶囦綔涓篔2ME鐨凣ame APIs鐨勪緥瀛愯創鍑烘潵錛屾棤濂堜竴鐩翠笉寰楃┖錛岀洿鍒版渶榪戞墠綆鍗曞湴鏁寸悊浜嗕竴涓嬶紝鎶婂畠鍏變韓鍑烘潵銆?br />
涓ユ牸鍦拌錛岃繖涓笉鑳界畻浣滀竴涓畬鏁寸殑娓告垙錛屾病鏈夎嚜宸辯殑鍒涙剰錛屽彧鏄畝鍗曞湴妯′豢浜嗕竴涓狥lash鐨勫皬娓告垙錛屽綋鏃舵槸涓轟簡鑷繁緇冧範鐢ㄧ殑錛孏ame Play涔熷緢綆鍗曪紝浣嗗寘鍚簡J2ME鐨凣ame鍖呬腑鎵鏈夌殑涓滆タ錛屼綔涓轟竴涓狣emo鏉ヨ錛屽唴瀹硅繕鏄緢鍏呭疄鐨勩?br />
鍦ㄤ粙緇嶄箣鍓嶏紝鍏堢畝鍗曞湴鎻愪竴涓婫aming API涓殑鍑犱釜綾伙紝鍖呮嫭Sprite錛孴iledLayer,LayerManager,Media.Player絳夈?br />Sprite錛氬伓灝旂湅鍒拌繃鏈変簺浜烘妸瀹冪炕璇戞垚綺劇伒錛屾垜鍋鋒噿涓涓嬶紝灝變笉緲昏瘧浜嗭紝榪欎釜綾葷敤鏉ヨ〃杈炬父鎴忎腑鐨勪竴涓椿鍔ㄧ殑瑙掕壊錛屽寘鎷帺瀹舵帶鍒剁殑Player瑙掕壊鍜岄潪鐜╁鎺у埗鐨勮鑹詫紙NPC錛夈?br />TiledLayer錛氳繖涓槸鐢ㄦ潵琛ㄨ揪鑳屾櫙鐨勭被錛屽叾瀹炰粠緇樺浘鐨勮搴︽潵鐪嬶紝Sprite鍜孴iledLayer娌℃湁鏈川宸埆錛屽彧鏄皢瑕佺敾鍦ㄥ睆騫曚笂鐨勪竴騫呭浘鍍忚屽凡錛屽洜姝ゅ湪Game鍖呬腑瀹冧滑閮芥槸Layer綾葷殑瀛愮被銆傚茍涓旈兘鑳藉浠庝竴騫呭浘鍍忔柟渚垮湴鏋勯犮?br />LayerManager錛氳繖涓槸鐢ㄦ潵綆$悊鎵鏈夊浘鍍忓璞$殑綾伙紝閫氳繃鎶奡prite鍜孴iledLayer鍔犲叆鍏朵腑錛孞2ME璁懼灝辯煡閬撳浣曟潵緇樺埗瀹冧滑浜嗐?br />GameCanvas錛氭渶鍚庤鎻愬埌鐨勬槸鐢誨竷錛岃繖鏄墍鏈夊彲瑙嗗璞℃渶緇堣琛ㄦ紨鐨勮垶鍙般傚叾瀹炶窡浠ュ墠鐨凜anvas娌℃湁鏈川鐨勪笉鍚岋紝鍚屾牱鏄彁渚涗簡涓涓狦raphics鎺ュ彛鏉ヤ緵鎶婁竴浜涘唴瀹圭敾涓婂幓鑰屽凡錛屼絾澧炲姞浜嗗鐜╁杈撳叆鐨勫鐞嗭紝鑳藉閫氳繃鎸夐敭鐘舵佹潵鐩存帴璇誨叆鐜╁鎸夐敭鎿嶄綔錛岀浉瀵規洿鍔犵畝渚夸簡銆?br />榪樺埄鐢ㄥ埌浜哅edia鍖呬腑鐨凱layer鍜孴oneControl鏉ユ挱鏀鵑煶涔愶紝娌℃湁闊充箰鍜屽0闊崇殑娓告垙鏄笉鍙兘鍑虹幇鐨勶紝鍛靛懙銆?br />
鍏堢畝鍗曞湴浠嬬粛涓涓嬭繖涓父鎴忥紝鐜╁鍙兘鎺у埗瑙掕壊錛堜竴涓鐫緗戝厹鐨勫皬浜猴級姘村鉤鍦扮Щ鍔紝鎺ヤ綇鑷劧涓嬭惤鐨勫皬鐞冨氨寰楀垎錛岀Н鍒嗗埌涓瀹氱▼搴﹀悗錛屽皬鐞冧笅钀介熷害灝嗗姞蹇紝鐩村埌鏈楂橀熶負姝紱濡傛灉娌℃帴鍒板皬鐞冿紝涔熸湁鐩稿簲鐨勬儵緗氾紝鏈緇堟父鎴忎細Game Over銆?br />
涓轟簡閬垮厤榪囦簬鍗曡皟錛岀帺瀹惰鑹蹭笉鏄畝鍗曞湴騫崇Щ錛岃屾槸鍒╃敤浜哠prite鐨勭畝鍗曞撫鍔ㄧ敾鏉ヨ瑙掕壊鐪嬩笂鍘繪湁浜涘姩浣溿傚叾瀹炲緢鏂逛究鐨勶紝鍙槸鍦ㄧЩ鍔ㄤ綅緗椂鏇存崲涓涓嬪浘鍍忓氨琛屼簡錛孲prite鎻愪緵鏈夊嚑涓柟娉昇extFrame()錛孭revFrame()鐢ㄦ潵鍒囨崲銆?br />澹伴煶閮ㄥ垎灝辨洿綆鍗曚簡錛屽彧鏄噸澶嶅湴鎾斁涓孌甸鍏堝啓榪涘幓鐨勯煶涔愶紝鏉ヨ嚜Sun鐨刉TK涓殑涓涓緥瀛愩?br />涓嶈繃鏃㈢劧鎻愬埌浜嗗畠錛屽氨榪樻槸鍏堢畝鍗曞湴璇翠竴涓嬪惂錛屽厤寰楀悗闈粙緇嶅叾浠栭儴鍒嗘椂鏈変簺鐤戦棶銆?br />
J2ME涓殑澹伴煶閮ㄥ垎闈炲父綆鍗曪紝褰撶劧鏁堟灉涔熶笉澶ソ錛屾墍闇鐨勫熀鏈厓绱犲彧鏈夊涓嬪嚑涓紝涓涓唴瀹歸儴鍒嗙殑Byte緋誨垪錛涗竴涓槸鎾斁鍣≒layer錛涜繕鏈変竴涓槸鎺у埗閮ㄥ垎鐨凾oneControl銆備唬鐮佺ず渚嬪涓嬶細
聽聽聽聽聽聽聽聽聽聽聽聽聽 tonePlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
聽聽聽聽聽聽聽聽聽聽聽聽聽 tonePlayer.setLoopCount(-1);
聽聽聽聽聽聽聽聽聽聽聽聽聽 tonePlayer.realize();
聽聽聽聽聽聽聽聽聽聽聽聽聽 ToneControl tc = (ToneControl)tonePlayer.getControl("javax.microedition.media.control.ToneControl");
聽聽聽聽聽聽聽聽聽聽聽聽聽 tc.setSequence(mySequence);
褰撶劧榪橀渶瑕佷簺鍒濆鍖栧伐浣滃拰寮傚父澶勭悊錛岀劧鍚庡氨鍙互閫氳繃tonePlayer.start()/close()鏂規硶鏉ユ帶鍒跺0闊崇殑鎾斁鍜屽仠姝簡銆?br />
鍏蜂綋璇峰弬瑙佹簮鐮佷腑CanvasGetBall.java涓殑createTonePlayer()鏂規硶銆?br />
閿i紦鍝嶄簡鍗婂ぉ錛屼富瑙掍篃璇ュ嚭鍦轟簡銆傝繖涓父鎴忛噷鐨勪富瑙掑彧鏈変竴涓帴鐞冨皬浜猴紝涓嶈繃瑙掕壊榪樻湁涓涓窡瀹冩紨瀵規墜鎴忕殑NPC錛屽氨鏄偅鍙粠澶╄岄檷鐨勫皬鐞冧簡銆傝繖涓や釜綾婚兘鏄疭prite鐨勫瓙綾伙紝灝忕悆鍥犱負鏈変簺鑷繁鐨勫姩浣滐紝鍚屾椂瀹炵幇浜哛unnable鎺ュ彛錛岃兘鑷富媧誨姩銆備笉榪囦篃寰堢畝鍗曪紝NPC鍢涳紝涓鑸潵璇撮兘鏄浉瀵瑰急鏅轟簺錛屼笉鐒朵篃娌℃硶鐜╀簡錛岃皝鐨勫弽搴旈熷害璺熷緱涓婃満鍣ㄥ晩錛屽啀璇翠簡錛孨PC鐭ラ亾鐨勪俊鎭篃瑕佸浜?)銆?br />
鍏堟潵鐪嬬湅涓昏鍚э紝BallPlayer綾誨氨鏄垜浠殑涓昏錛屽叾瀹為潪甯哥畝鍗曪紝鍦ㄦ墍鏈夌殑6涓被涓紝闄や簡璁板垎鐢ㄧ殑Score澶栧氨鏁板畠鏈灝忎簡銆傛彁渚涗竴騫呭浘鍍忔妸瀹冨疄渚嬪寲鍚庯紝灝卞彧鑳介氳繃宸﹀彸縐誨姩鏉ユ帶鍒朵簡錛岄澶栫殑鍑犱釜鏂規硶閮芥槸璺熻鍒嗘湁鍏崇郴鐨勶紝鍏堢暐榪囦笉鎻愩?br />鍏堟潵鐪嬬湅瀹冪殑鏋勯犳柟娉曪細
聽 public BallPlayer(Image img, int fw, int fh) {
聽聽聽 super(img, fw, fh);
聽聽聽 this.step = fw / 2;
聽 }
涓昏宸ヤ綔閮界敱瀹冪殑鐖剁被Sprite鍋氫簡錛岀粰鍑轟竴騫呭浘鍍忥紝榪欎釜鍥懼儚鏄敤PNG鏍煎紡鎻愪緵鐨勶紝澶у鍙兘鐣欐剰鍒頒笉鏄竴騫呭崟涓鐨勫浘鍍忥紝鑰屾槸鏈夌偣璞″撫鍔ㄧ敾涓殑鍑犱釜鍏抽敭甯э紝涓嶉敊錛岀殑紜姝わ紝鏋勯犳柟娉曚腑鐨勫悗涓や釜鍙傛暟灝辨槸鍛婅瘔Sprite濡備綍鍒嗗壊榪欏箙鍥懼儚鐨勩傝繖閲屾暣涓狿layer鍏辨湁6涓叧閿撫錛屾瘮杈冪矖緋欙紝鍛靛懙錛岃嚜宸卞姩鎵嬫埅灞忓仛鐨?)
Field step鏄敤鏉ユ帶鍒朵富瑙掔殑縐誨姩姝ヤ紣鐨勶紝涓轟簡蹇竴鐐癸紝鍙栦簡瀹冭韓瀹界殑涓鍗娿?br />
鎺ヤ笅鏉ユ垜浠湅鐪嬪浣曠Щ鍔ㄥ畠錛屽氨鏄氳繃榪欐牱涓や釜鏂規硶鏉ュ乏縐誨拰鍙崇Щ銆?br />
聽 public void left() {
聽聽聽 prevFrame();
聽聽聽 if( (getX() - step) >= -12 ) {
聽聽聽聽聽 move( -1 * step, 0);
聽聽聽 }
聽 }
聽 public void right () {
聽聽聽 nextFrame();
聽聽聽 if((getX() + step) < canvas.getWidth()) {
聽聽聽聽聽 move(step, 0);
聽聽聽 }
聽 }
鐣欐剰涓涓嬶紝榪欓噷鍙鐩稿浣嶇Щ錛屼富瑙掔殑寮濮嬩綅緗氳繃setPosition鏉ヨ瀹氾紝鍦ㄨ繍鍔ㄨ繃紼嬩腑鏈濂藉氨涓嶈鐩存帴璁劇疆浣嶇疆浜嗭紝澧炲ぇ璁$畻閲忥紝瑕佷笉灝辯湅璧鋒潵鍔ㄤ綔涓嶈嚜鐒朵簡銆?br />
鎺ヤ笅鏉ョ畝鍗曡涓涓嬮厤瑙掞紞錛嶇悆銆傜悆鐨勬瀯閫犺窡涓昏綾諱技錛屽彧鏄負浜嗚妭鐪佹瀯閫犻攢姣佸璞″甫鏉ョ殑寮閿錛岃繖涓璞℃槸涓鐩村瓨鍦ㄧ殑錛屼篃灝辨槸璁╁畠鎺変笅鍘諱簡鍙堣嚜宸辮搗鏉ワ紝騫舵牴鎹鍒嗘潵紜畾涓嬭惤閫熷害錛岀畝鍗曞湴鐢ㄧ嚎紼嬪疄鐜扮殑錛屾病鎬庝箞浠旂粏璁捐錛屽ぇ瀹剁湅鐪嬩唬鐮佸氨娓呮浜嗐?br />
鍐嶆潵鐪嬬湅CanvasGetBall榪欎釜綾伙紝瀹冧粠GameCanvas緇ф壙錛屽茍瀹炵幇浜咰ommandListener鍜孯unnable涓や釜鎺ュ彛錛屾槸鏁翠釜娓告垙涓渶澶嶆潅鐨勪竴涓被浜嗭紝涓昏宸ヤ綔鏈夊涓嬪嚑涓儴鍒嗭紝瀹炰緥鍖栦富瑙掞紝閰嶈瀵硅薄錛岃繕鏈夎儗鏅璞★紝闊充箰絳夛紝騫跺湪閫傚綋鐨勬椂鍊欑敾鍑鴻繖浜涘璞★紝鍦ㄩ《閮ㄧ敾鍑轟簺鐘舵佷俊鎭紝騫舵牴鎹帺瀹舵搷浣滃紑濮嬪拰鏆傚仠娓告垙錛屽茍鏄劇ず鐩稿簲鐢婚潰銆傚茍閫氳繃榪涜紕版挒媯嫻嬫潵鍒ゅ畾鐜╁鏄惁鎺ュ埌浜嗗皬鐞冦?br />媯嫻嬫柟娉曞涓嬶細
聽 private boolean notMiss( ) {
//聽聽聽 return player.collidesWith(ball,false);
聽聽聽 int ballCX = ball.getX() + ball.getWidth()/2;
聽聽聽 int ballCY = ball.getY() + ball.getHeight()/2;
聽聽聽 int playerCX = player.getX() + player.getWidth()/2;
聽聽聽 int playerCY = player.getY() + player.getHeight()/2;
聽聽聽 return ((Math.abs(playerCX - ballCX)< ball.getWidth()/2) &&
聽聽聽聽聽聽聽聽聽聽聽 (Math.abs(ballCY - playerCY) < 5));
聽 }
琚敞閲婃帀鐨勪竴琛屾槸鐩存帴鐢⊿prite鐨勭鎾炴嫻嬶紝涓嬮潰鐨勯儴鍒嗘槸鑷繁璁$畻涓ゅ箙鍥懼儚鏈夋病鏈夐噸鍙狅紝鏁堟灉宸笉澶氥傚叾涓璫ollidesWith()鐨勭浜屼釜鍙傛暟鏄憡璇夊唴閮ㄦ柟娉曟槸鍚﹁鐢ㄥ儚绱犵駭鍒殑媯嫻嬶紝閫氬父絳旀鏄崈涓囦笉瑕侊紝榪欏緢鎱㈢殑錛岃屼笖娌℃湁蹇呰榪欎箞綺劇‘銆?br />
涓轟簡璇存槑鏁翠釜娓告垙鐨勬帶鍒墮昏緫錛屾垜浠厛鏉ョ湅鐪婱IDletGetBall榪欎釜綾伙紝璺熼氬父鐨凪IDlet鐣ユ湁涓嶅悓錛屽洜涓烘垜鎶婁富綰跨▼鏀懼湪浜咰anvasGetBall涓紝MIDletGetBall鍙槸綆鍗曞湴鎺у埗涓葷嚎紼嬪氨琛屼簡銆?br />
聽 public void startMainThread() {
聽聽聽 Display.getDisplay(this).setCurrent(displayable);
聽聽聽 if(mainThread != null) {
聽聽聽聽聽 mainThread = null;
聽聽聽聽聽 Runtime.getRuntime().gc();
聽聽聽 }
聽聽聽 mainThread = new Thread(displayable);
聽聽聽 mainThread.start();
聽 }
鍏朵腑絎竴琛屽氨鏄緗綋鍓嶆樉紺洪〉闈紱涔熷氨鏄樉紺篊anvasGetBall銆?br />
鍥炲埌CanvasGetBall錛屾暣涓父鎴忓垎鍑犱釜闃舵錛岀浉搴旀湁涓嶅悓鐨勭敾闈㈠拰鍛戒護鎺ュ彛錛岃緇嗚鏄庡涓嬶細
1. 絳夊緟寮濮嬶紝瀵瑰簲鍦ㄦ柟娉時eady():
聽聽聽聽 public void ready() {
聽聽聽聽聽聽聽 cover.setTitle(TIPS[2]);
聽聽聽聽聽聽聽 cover.addCommand(playCommand);
聽聽聽聽聽聽聽 Display.getDisplay(MIDletGetBall.instance).setCurrent(cover);
聽聽聽聽 }
聽聽聽 涓轟簡緇樺埗鏂逛究錛岃繖閲屽崟鐙敤浜嗕釜GameCanvas鏉ョ粯鍒舵彁紺轟俊鎭拰鍝嶅簲鍛戒護錛屽茍鏍規嵁鐜╁鎿嶄綔鍦–anvasCover鍜孋anvasGetBall涓や釜鐢婚潰涔嬮棿鏉ュ洖鍒囨崲銆?br />
2. 娓告垙鐢婚潰錛屽寘鎷惎鍔ㄥ拰緇撴潫涓や釜鏂規硶錛?br />聽public void start() {
聽聽聽 if(!playing) {
聽聽聽聽聽 strTip = TIPS[0];
聽聽聽聽聽 playing = true;
聽聽聽聽聽 MIDletGetBall.instance.startMainThread();
聽聽聽聽聽 removeCommand(playCommand);
聽聽聽聽聽 removeCommand(resumeCommand);
聽聽聽聽聽 addCommand(pauseCommand);
聽聽聽聽聽 ball.start();
聽聽聽聽聽 try {
聽聽聽聽聽聽聽 if(tonePlayer != null) {
聽聽聽聽聽聽聽聽聽 tonePlayer.start();
聽聽聽聽聽聽聽 }
聽聽聽聽聽 }
聽聽聽聽聽 catch (MediaException ex) {
聽聽聽聽聽聽聽 tonePlayer.close();
聽聽聽聽聽聽聽 tonePlayer = null;
聽聽聽聽聽 }
聽聽聽 }
聽 }
聽 public void stop () {
聽聽聽 if(playing) {
聽聽聽聽聽 ball.stop();
聽聽聽聽聽 strTip = TIPS[1];
聽聽聽聽聽 try {
聽聽聽聽聽聽聽 Thread.sleep(300);
聽聽聽聽聽 }
聽聽聽聽聽 catch (InterruptedException ex) {
聽聽聽聽聽 }
聽聽聽聽聽 playing = false;
聽聽聽聽聽 removeCommand(pauseCommand);
聽聽聽聽聽 addCommand(resumeCommand);
聽聽聽聽聽 try {
聽聽聽聽聽聽聽 tonePlayer.stop();
聽聽聽聽聽 }
聽聽聽聽聽 catch (MediaException ex1) {
聽聽聽聽聽聽聽 tonePlayer.close();
聽聽聽聽聽聽聽 tonePlayer = null;
聽聽聽聽聽 }
聽聽聽 }
聽 }
聽騫跺搴旇緗浉搴旂殑鍛戒護鏉ヨ鐜╁鑳藉緇х畫涓嬪幓錛屾瀯鎴愪竴涓畝鍗曠殑灝侀棴鎺у埗鐜礬銆?br />
3.娓告垙緇撴潫錛屽搴旀柟娉昰ameover()
聽 public void gameover() {
聽聽聽 this.stop();
聽聽聽 cover.setTitle(TIPS[3]);
聽聽聽 cover.removeCommand(playCommand);
聽聽聽 cover.addCommand(restartCommand);
聽聽聽 Display.getDisplay(MIDletGetBall.instance).setCurrent(cover);
聽 }
璇村埌榪欓噷錛屽熀鏈笂涔熷氨鎶婂畠璁插畬浜嗭紝鍏蜂綋鍐呭璇瘋緇嗙爺絀舵簮鐮侊紝鍏跺疄娌″繀瑕佺湅澶涔︼紝娣卞叆鍦扮爺絀朵竴涓棶棰樺茍鏍規嵁鑷繁鐨勭悊瑙f潵鏀硅繘鎴栬呮槸淇瀹冿紝瀹炶返鎵嶆槸鏈濂界殑鑰佸笀錛屽笇鏈涘ぇ瀹惰兘澶熸湁鎵鏀惰幏銆?br />
鎬葷粨涓涓嬶紝榪欎釜娓告垙瀛樺湪鐨勯棶棰樻湁濡備笅鍑犱釜錛?br />1. 娌℃湁濂界殑Game Play錛岀敾闈㈠緢宸紱
2. 鍙帺鎬т笉寮猴紝鎺у埗姣旇緝鍗曡皟錛?br />3. 娓告垙澹伴煶榪囦簬鍗曡皟錛?br />4. 榪愯閫熷害鏈変簺鎱€?br />
浣嗕綔涓轟竴涓妧鏈疍emo錛屽畠娑電洊浜咷ame鍖呬腑鐨勬墍鏈夊唴瀹癸紝騫舵彁渚涗簡涓涓埄鐢ㄧ嚎紼嬫柟寮忓疄鐜扮畝鍗曟父鎴忕殑鏂規硶錛屽緢綆鍗曪紝浣嗕笉閫傚悎鐪熷疄鐨勬父鎴忥紝姣旇緝璐規椂銆?br />鑳屾櫙澶勭悊寰堝樊錛屽彲浠ラ氳繃涓涓狹ap鏉ュ垎鍓茬粍鍚堝鐞嗚儗鏅皬鐗囷紝鑳借娓告垙鍦烘櫙鍙樺緱鐢熷姩浜涳紝鍙互瀹炵幇綾諱技浜庡嵎杞存父鎴忕殑鏁堟灉錛岃嚜宸辮瘯璇曞惂錛?br />
闄勶細婧愪唬鐮佸拰宸ョ▼錛屽湪JBuilderX涓嬬紪璇戯紝鍚屾椂闇瑕乄TK2.0鎴栦互涓婄増鏈傚ソ涔呮病鏈夌敤Jbuilder浜嗭紝涔頒笉璧鋒鐗?),鐜板湪涓昏寮鍙戝伐鍏鋒槸Eclipse鍜孍clipseME,鎰熻闈炲父鐖斤紝鍏嶈垂鐨勪篃鏈夊ソ璐с?br />