亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

J2ME雷霆戰(zhàn)機(jī)源碼:功能機(jī)飛行射擊主循環(huán)、對(duì)象池與真機(jī)適配

J2ME雷霆戰(zhàn)機(jī)源碼:功能機(jī)飛行射擊主循環(huán)、對(duì)象池與真機(jī)適配 簡(jiǎn)介JAVA ME 經(jīng)典飛行射擊游戲《9688雷霆戰(zhàn)機(jī)》的個(gè)人移植源碼包面向希望從實(shí)戰(zhàn)代碼理解 J2ME/MIDP 移動(dòng)游戲開(kāi)發(fā)的入門(mén)與進(jìn)階學(xué)習(xí)者。內(nèi)容圍繞 MIDlet 主類入口、GameLoop 游戲循環(huán)、飛機(jī)/敵機(jī)/子彈對(duì)象模型、碰撞檢測(cè)與狀態(tài)機(jī)管理展開(kāi)并涉及 Canvas 繪圖、鍵盤(pán)或觸摸事件響應(yīng)、圖像預(yù)加載及音頻播放等環(huán)節(jié)可幫助讀者建立較完整的小型移動(dòng)游戲框架認(rèn)知。壓縮包約 4.4MB文件總數(shù)顯示為 0、類型明細(xì)暫未提供源碼與工具屬性較明確包體以完整工程移植內(nèi)容為主。已有 1139 人學(xué)習(xí)或下載說(shuō)明其在同類 J2ME 學(xué)習(xí)材料中有一定參考熱度。通過(guò)閱讀和調(diào)試這套移植代碼讀者可揣摩幀率控制、內(nèi)存分配與資源緩存等受限設(shè)備上的優(yōu)化思路也能練習(xí)代碼閱讀、問(wèn)題定位和模塊拆解方法適合作為課程設(shè)計(jì)或個(gè)人練手的對(duì)照樣本。1. 一臺(tái)舊功能機(jī)里的飛行射擊這套 J2ME 雷霆戰(zhàn)機(jī)源碼在跑什么手里那臺(tái) 240×320 的舊按鍵機(jī)還能開(kāi)機(jī)但能裝進(jìn)去的游戲已經(jīng)不多了。這份個(gè)人移植的 J2ME 雷霆戰(zhàn)機(jī)源碼做的事就是讓一臺(tái) Java ME 功能機(jī)重新跑起完整的豎版飛行射擊——飛機(jī)左右穿梭、子彈成排往外噴、敵機(jī)一波接一波分?jǐn)?shù)寫(xiě)進(jìn) RMS關(guān)機(jī)再開(kāi)還在。整套工程不依賴任何第三方游戲引擎全靠 MIDP 自帶的 Canvas、GameAPI、RMS 和 Media API 拼起來(lái)用老式的 J2ME 開(kāi)發(fā)工具包WTK導(dǎo)入就能編出 JAR。它適合三類人手里有舊機(jī)器想復(fù)刻點(diǎn)東西的、想看清 J2ME 游戲主循環(huán)到底怎么寫(xiě)的、以及接手了一個(gè)老 JAR 要做二次開(kāi)發(fā)的。代碼量不大但結(jié)構(gòu)完整從 MIDlet 生命周期到子彈對(duì)象池回收都留著清晰的切口改起來(lái)不用翻半天。2. 工程骨架與目錄結(jié)構(gòu)MIDlet 入口、Canvas 主循環(huán)和資源怎么擺先看骨架。J2ME 項(xiàng)目和普通 Java 工程最大的差別在于它必須有一個(gè)明確的「應(yīng)用入口」和一份聲明式的描述文件打包器靠這兩樣?xùn)|西才能把一堆 class 變成一個(gè)能裝進(jìn)手機(jī)的 JAR。2.1 一份能直接導(dǎo)入 WTK 的目錄長(zhǎng)什么樣這套源碼的目錄是標(biāo)準(zhǔn)的老式 J2ME 布局沒(méi)有 Maven 也沒(méi)有 Gradle純靠 IDE 的工程描述和 Ant 腳本src/ com/game/midlet/GameMIDlet.java MIDlet 入口管生命周期 com/game/core/GameCanvas.java 主循環(huán)、按鍵、繪制 com/game/core/Entity.java 實(shí)體基類坐標(biāo)/速度/半徑 com/game/core/BulletPool.java 子彈對(duì)象池 com/game/core/EnemyManager.java 敵機(jī)波次調(diào)度 com/game/core/ScoreStore.java RMS 最高分 com/game/core/Res.java 圖片資源統(tǒng)一加載與緩存 res/ player.png enemy.png bullet.png bg.png bgm.mid shoot.wav META-INF/MANIFEST.MF Game.jad build.xmlsrc下面按職責(zé)分了 midlet 和 core 兩個(gè)包這個(gè)分層對(duì) J2ME 來(lái)說(shuō)已經(jīng)夠用了。res里的圖片必須是 PNG這是 MIDP 規(guī)范里唯一被強(qiáng)制支持的位圖格式別指望塞 JPG 進(jìn)去。Game.jad是 Java 應(yīng)用描述文件很多機(jī)型在安裝時(shí)會(huì)先讀 JAD 再?zèng)Q定要不要下載 JAR里面的字段和 MANIFEST 必須對(duì)得上。2.2 MIDlet 生命周期startApp 里只做一件事入口類承擔(dān)的工作比想象中少。J2ME 的 MIDlet 有startApp、pauseApp、destroyApp三個(gè)狀態(tài)回調(diào)最容易踩的坑是把資源加載和線程啟動(dòng)都堆在startApp里結(jié)果用戶按了掛機(jī)鍵再切回來(lái)第二份線程就起來(lái)了畫(huà)面越跑越快。import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.microedition.lcdui.Display; public class GameMIDlet extends MIDlet { private GameCanvas canvas; private Display display; protected void startApp() throws MIDletStateChangeException { if (canvas null) { display Display.getDisplay(this); Res.loadAll(); // 素材只在這里加載一次全部進(jìn)靜態(tài)緩存 canvas new GameCanvas(this); canvas.startLoop(); // 主循環(huán)線程跟著 Canvas 走 } display.setCurrent(canvas); // 切回來(lái)只是重新設(shè)為當(dāng)前屏幕 } protected void pauseApp() { if (canvas ! null) canvas.pauseLoop(); // 掛機(jī)就停線程省電 } protected void destroyApp(boolean unconditional) { if (canvas ! null) canvas.stopLoop(); } public void exit() { // 游戲內(nèi)菜單調(diào)用 destroyApp(true); notifyDestroyed(); } }startApp里用canvas null做了一次性判斷這是整套代碼里最值錢(qián)的一行。J2ME 設(shè)備在來(lái)電、切換后臺(tái)、開(kāi)蓋合蓋時(shí)都會(huì)反復(fù)觸發(fā)startApp和pauseApp如果不做這個(gè)判斷每次切回來(lái)就是一個(gè)新 Canvas 加一個(gè)新線程內(nèi)存和幀率一起崩。pauseLoop只是把running標(biāo)志置 false 并讓線程自然退出循環(huán)不調(diào)Thread.stop()——那個(gè)方法在 CLDC 上行為不確定屬于血淚經(jīng)驗(yàn)。參數(shù)上notifyDestroyed()是告訴運(yùn)行環(huán)境「我自己要退了」必須主動(dòng)調(diào)否則部分機(jī)型會(huì)認(rèn)為應(yīng)用異常退出并彈提示。Res.loadAll()放在 Canvas 創(chuàng)建之前保證第一幀繪制時(shí)所有Image都已經(jīng)就位避免第一幀出現(xiàn)空指針。2.3 JAD 與 MANIFEST 里的關(guān)鍵字段JAR 裝不上手機(jī)八成是這兩個(gè)文件的問(wèn)題。核心字段就這幾個(gè)MIDlet-Name: ThunderShooter MIDlet-Version: 1.0.0 MIDlet-Vendor: Personal MIDlet-1: Thunder, /player.png, com.game.midlet.GameMIDlet MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0MIDlet-1的格式是「顯示名, 圖標(biāo)路徑, 入口類全名」三段用英文逗號(hào)加空格分隔少一個(gè)空格某些機(jī)型就解析失敗。MicroEdition-Configuration和MicroEdition-Profile直接決定了這臺(tái)機(jī)器愿不愿意裝你的包寫(xiě) CLDC-1.1 意味著放棄 CLDC-1.0 的老機(jī)器寫(xiě) CLDC-1.0 則用不了浮點(diǎn)和部分集合 API。這套源碼選了 CLDC-1.1 MIDP-2.0是個(gè)務(wù)實(shí)的取舍——覆蓋不了最早那批單色機(jī)但換來(lái)了Image.createRGBImage和Manager這些必備能力。# 老式 WTK 的標(biāo)準(zhǔn)打包流程三步缺一不可 javac -bootclasspath $WTK/lib/cldcapi11.jar:$WTK/lib/midpapi20.jar \ -d classes $(find src -name *.java) $WTK/bin/preverify -classpath $WTK/lib/cldcapi11.jar:$WTK/lib/midpapi20.jar -d classes classes jar cfm ThunderShooter.jar META-INF/MANIFEST.MF -C classes . -C res .preverify這一步是 J2ME 獨(dú)有的它在每個(gè) class 里插入棧映射信息供設(shè)備上的 KVM 做字節(jié)碼校驗(yàn)。跳過(guò)它模擬器可能照跑真機(jī)上直接報(bào)校驗(yàn)錯(cuò)誤。構(gòu)建腳本里把它寫(xiě)成 Ant 的一個(gè)exectarget 就行別手動(dòng)敲命令太長(zhǎng)容易漏 classpath。3. 核心玩法拆解從主循環(huán)到子彈與敵機(jī)的碰撞判定骨架搭好之后真正決定手感的是主循環(huán)和實(shí)體管理。這部分代碼不多但每一處都能直接換成「卡不卡」和「判定準(zhǔn)不準(zhǔn)」。3.1 幀循環(huán)里的 update 與 draw 分離J2ME 沒(méi)有游戲引擎的requestAnimationFrame最穩(wěn)的做法是自建線程加固定步長(zhǎng)。這套代碼把邏輯更新和繪制徹底分開(kāi)update只改數(shù)據(jù)paint只讀數(shù)據(jù)中間不互相調(diào)用。public class GameCanvas extends Canvas implements Runnable { private static final int FRAME_MS 40; // 25 FPS功能機(jī)的舒適區(qū) private volatile boolean running false; private Thread loopThread; private long lastTick; public void startLoop() { if (running) return; running true; lastTick System.currentTimeMillis(); loopThread new Thread(this); loopThread.start(); } public void pauseLoop() { running false; } public void run() { while (running) { long now System.currentTimeMillis(); int delta (int) (now - lastTick); if (delta FRAME_MS) { try { Thread.sleep(FRAME_MS - delta); } catch (InterruptedException e) { } continue; } lastTick now; update(delta); repaint(); serviceRepaints(); // 立刻刷別讓重繪消息在事件隊(duì)列里排隊(duì) } } }FRAME_MS 40對(duì)應(yīng) 25 幀這是老機(jī)器的甜點(diǎn)值。往 30 幀調(diào)33ms不是不行但繪制一幀如果超時(shí)System.currentTimeMillis()的差值會(huì)越滾越大表現(xiàn)為「走兩步卡一下」。差值累積的處理方式是不補(bǔ)幀直接把lastTick重置到當(dāng)前時(shí)間寧可掉幀也不讓邏輯跳步。volatile修飾running是因?yàn)檫@個(gè)字段跨線程讀寫(xiě)沒(méi)有它暫停指令在部分虛擬機(jī)上不會(huì)被主循環(huán)看到。repaint()加serviceRepaints()連用是 Canvas 的經(jīng)典寫(xiě)法前者只是把重繪請(qǐng)求丟進(jìn)事件隊(duì)列后者強(qiáng)制同步執(zhí)行到paint完成。少寫(xiě)后面那一句畫(huà)面會(huì)滯后一到兩幀彈幕密集時(shí)感覺(jué)特別明顯。3.2 實(shí)體與對(duì)象池別讓內(nèi)存在彈幕里抖射擊游戲最怕的不是算力不夠是 GC 在關(guān)鍵時(shí)刻來(lái)一下。一局下來(lái)幾千發(fā)子彈如果每發(fā)都new Bullet()CLDC 上那個(gè)小堆幾秒鐘就撐不住。這套代碼的解法是固定容量對(duì)象池一次分配永不擴(kuò)容。public class BulletPool { private final Bullet[] pool; private int liveCount; // [0, liveCount) 是活躍子彈 public BulletPool(int capacity) { pool new Bullet[capacity]; for (int i 0; i capacity; i) { pool[i] new Bullet(); // 啟動(dòng)時(shí)一次性 new 完 } } public void spawn(int x, int y, int vx, int vy, int dmg) { if (liveCount pool.length) return; // 池滿直接丟棄絕不擴(kuò)容 Bullet b pool[liveCount]; b.reset(x, y, vx, vy, dmg); } public void update(int delta) { for (int i liveCount - 1; i 0; i--) { Bullet b pool[i]; b.x b.vx * delta / 1000; b.y b.vy * delta / 1000; if (b.y -16 || b.y 400 || b.dead) { pool[i] pool[--liveCount]; // 尾元素覆蓋O(1) 回收 pool[liveCount] b; } } } }倒序遍歷是這份回收邏輯能成立的前提。pool[i] pool[--liveCount]把最后一個(gè)活躍子彈挪到當(dāng)前位置然后liveCount減一被回收的b則回到數(shù)組尾部等待復(fù)用。因?yàn)槭堑剐虮慌策^(guò)來(lái)的那個(gè)元素索引一定小于當(dāng)前的i下一輪不會(huì)重復(fù)處理。如果寫(xiě)成正序挪過(guò)來(lái)的元素會(huì)被跳過(guò)子彈就「穿?!癸w過(guò)去不消失。capacity的取值我一般按「最壞情況下屏幕同屏子彈數(shù)」的 1.5 倍來(lái)定這套代碼給的是 64。滿池時(shí)丟棄而不是擴(kuò)容這個(gè)設(shè)計(jì)是刻意的——寧可少一發(fā)子彈也不能在戰(zhàn)斗中觸發(fā)一次數(shù)組復(fù)制。敵機(jī)那邊同理EnemyManager里也是固定數(shù)組加波次調(diào)度不用Vector。3.3 碰撞判定圓形距離平方比矩形更貼合彈幕判定用矩形包圍盒是最省事的但豎版射擊游戲里機(jī)身窄、彈幕斜飛矩形框會(huì)在視覺(jué)上明明沒(méi)碰到的時(shí)候判定命中玩家感受很差。這套代碼用的是圓形判定只比較距離的平方省掉開(kāi)方。public class Entity { public int x, y; // 左上角坐標(biāo) public int halfW, halfH; // 半寬半高用于繪制 public int cx, cy; // 判定圓心一般略小于視覺(jué)中心 public int radius; // 判定半徑 public void syncCenter() { cx x halfW; cy y halfH; } } public class Collision { public static boolean overlap(Entity a, Entity b) { int dx a.cx - b.cx; int dy a.cy - b.cy; int r a.radius b.radius; return dx * dx dy * dy r * r; // 比較平方不做開(kāi)方 } }radius通常設(shè)成視覺(jué)尺寸的 0.6 到 0.7 倍這叫「寬容判定」玩家被擦彈擦過(guò)去不算死手感會(huì)好很多。自機(jī)受傷判定要比敵機(jī)更小一圈因?yàn)樽詸C(jī)是玩家唯一在意的對(duì)象判定越寬容越舒服而敵機(jī)被打中的判定可以放大到 1.0讓射擊更有反饋感。syncCenter必須在坐標(biāo)變化后調(diào)用或者干脆把cx/cy算成x halfW的 getter避免忘了同步導(dǎo)致判定錯(cuò)位——這是個(gè)特別隱蔽的 bug畫(huà)面上全都對(duì)就是打不中。每幀的檢測(cè)順序是自機(jī)子彈 × 敵機(jī) → 敵機(jī)子彈 × 自機(jī) → 敵機(jī) × 自機(jī)。前兩組是 O(m×n) 的雙層循環(huán)靠數(shù)量控制子彈池 64、敵機(jī)池 24保證在 CLDC 上也不卡。想再省一點(diǎn)可以按屏幕縱向分三段只跟同一段內(nèi)的對(duì)象比實(shí)測(cè)能砍掉約六成計(jì)算量。3.4 敵機(jī)波次與難度曲線波次調(diào)度沒(méi)寫(xiě)成狀態(tài)機(jī)用的是一個(gè)很土但好調(diào)的結(jié)構(gòu)數(shù)據(jù)表加游標(biāo)。// 每一波起始時(shí)刻(ms)、敵機(jī)數(shù)量、生成間隔(ms)、橫向起始位置、移動(dòng)模式 private static final int[][] WAVES { { 0, 5, 800, 40, 0 }, // 模式0直線下落 { 6000, 8, 600, 100, 1 }, // 模式1正弦橫移 {13000, 12, 400, 20, 2 }, // 模式2斜向俯沖 {21000, 16, 300, 60, 3 }, // 模式3追蹤自機(jī) };把難度寫(xiě)成表的好處是調(diào)平衡的時(shí)候不用改代碼邏輯。想讓它更兇把間隔從 800 調(diào)到 500、數(shù)量加兩架重新編譯就行。游標(biāo)推進(jìn)的邏輯在EnemyManager.update里當(dāng)前波次的生成數(shù)量耗盡且場(chǎng)上敵機(jī)清空后才推下一波中間留一段空窗給玩家喘氣。這個(gè)「清空再推進(jìn)」的條件如果不加波次會(huì)疊在一起第三關(guān)就能直接勸退。4. 屏幕與按鍵適配跨機(jī)型移植最容易翻車的一層同一份 JAR在 128×160 的機(jī)器上正常在 240×320 的機(jī)器上飛出屏幕在 176×208 的機(jī)器上按鍵全亂——這是移植 J2ME 游戲最典型的一天。適配層不做前面寫(xiě)得再好也白搭。4.1 分辨率適配邏輯坐標(biāo)系加一次性重采樣MIDP 的drawImage不支持縮放這是硬約束。想畫(huà)一張能適應(yīng)多種屏幕的圖只有兩條路運(yùn)行時(shí)自己重采樣或者按固定邏輯分辨率畫(huà)、四周留黑邊。這套代碼兩條都用了。先看繪制時(shí)的坐標(biāo)系換算private static final int LOGIC_W 240; private static final int LOGIC_H 320; protected void paint(Graphics g) { int sw getWidth(); int sh getHeight(); // 以邏輯分辨率為基準(zhǔn)計(jì)算居中偏移不做非整數(shù)縮放 int ox (sw - LOGIC_W) / 2; int oy (sh - LOGIC_H) / 2; g.setColor(0x000010); g.fillRect(0, 0, sw, sh); // 先鋪滿底色防止邊緣露出臟像素 g.translate(ox, oy); // 之后所有繪制都用邏輯坐標(biāo) g.setClip(0, 0, LOGIC_W, LOGIC_H); // 裁剪掉超出的部分別畫(huà)到屏幕外 drawBg(g); enemies.draw(g); bullets.draw(g); player.draw(g); drawHud(g); g.translate(-ox, -oy); // 還原給后續(xù)可能的全屏繪制讓路 }g.translate加setClip這個(gè)組合是整段的核心。邏輯坐標(biāo)統(tǒng)一按 240×320 算屏幕比它大的時(shí)候居中兩邊鋪深色底比它小的時(shí)候裁剪掉邊緣保證玩家不會(huì)被看不見(jiàn)的敵機(jī)打死。translate必須成對(duì)還原否則 HUD 和后續(xù)的全屏效果會(huì)畫(huà)到偏移位置上去這個(gè) bug 排查起來(lái)特別費(fèi)勁因?yàn)檫壿媽拥臄?shù)據(jù)全是對(duì)的。屏幕比邏輯分辨率大的時(shí)候如果就這么留黑邊會(huì)很丑。更徹底的做法是啟動(dòng)時(shí)把整套素材按比例重采樣一次// 啟動(dòng)時(shí)按目標(biāo)尺寸把素材重采樣一遍運(yùn)行時(shí)零開(kāi)銷 public static Image scaleImage(Image src, int dstW, int dstH) { int sw src.getWidth(); int sh src.getHeight(); int[] srcPx new int[sw * sh]; src.getRGB(srcPx, 0, sw, 0, 0, sw, sh); // 需要 MIDP 2.0 int[] dstPx new int[dstW * dstH]; for (int y 0; y dstH; y) { int sy y * sh / dstH; for (int x 0; x dstW; x) { dstPx[y * dstW x] srcPx[sy * sw x * sw / dstW]; // 最近鄰插值 } } return Image.createRGBImage(dstPx, dstW, dstH, true); }最近鄰插值出來(lái)的圖會(huì)有鋸齒但 J2ME 上沒(méi)得選——雙線性要浮點(diǎn)運(yùn)算CLDC 1.0 直接不支持。createRGBImage的第四個(gè)參數(shù)processAlpha傳true才會(huì)保留透明通道傳false會(huì)得到一張黑底圖這個(gè)參數(shù)值錢(qián)。重采樣只發(fā)生在啟動(dòng)時(shí)算力代價(jià)可以接受千萬(wàn)別放進(jìn)paint里一幀幾次重采樣能讓幀率掉到個(gè)位數(shù)。4.2 按鍵映射getGameAction 的返回值不一定靠得住Canvas.getGameAction(keyCode)理論上把物理鍵翻譯成UP/DOWN/LEFT/RIGHT/FIRE這些抽象動(dòng)作實(shí)際上部分機(jī)型對(duì)方向鍵返回 0還有一批機(jī)器把方向鍵直接映射成數(shù)字鍵 2/4/6/8。只寫(xiě) switch 不寫(xiě)兜底用戶會(huì)發(fā)現(xiàn)飛機(jī)紋絲不動(dòng)。protected void keyPressed(int keyCode) { int action getGameAction(keyCode); switch (action) { case Canvas.UP: player.moveUp(); break; case Canvas.DOWN: player.moveDown(); break; case Canvas.LEFT: player.moveLeft(); break; case Canvas.RIGHT: player.moveRight(); break; case Canvas.FIRE: player.fire(); break; default: // 兜底部分機(jī)型方向鍵不映射游戲動(dòng)作只報(bào)數(shù)字鍵 if (keyCode Canvas.KEY_NUM2) player.moveUp(); else if (keyCode Canvas.KEY_NUM8) player.moveDown(); else if (keyCode Canvas.KEY_NUM4) player.moveLeft(); else if (keyCode Canvas.KEY_NUM6) player.moveRight(); else if (keyCode Canvas.KEY_NUM5) player.fire(); break; } }這套兜底覆蓋了絕大多數(shù)功能機(jī)的鍵位習(xí)慣。還有個(gè)更細(xì)的問(wèn)題某些機(jī)器的左軟鍵對(duì)應(yīng)-6、右軟鍵對(duì)應(yīng)-7取值是負(fù)數(shù)用getGameAction同樣返回 0需要單獨(dú)判斷。別指望一次寫(xiě)完全部機(jī)型最實(shí)際的做法是在游戲里塞一個(gè)隱藏的「按鍵調(diào)試」界面把keyCode和getGameAction的返回值直接打在屏幕上裝機(jī)實(shí)測(cè)時(shí)看一眼就知道該補(bǔ)哪一行。4.3 觸屏與鍵盤(pán)雙支持MIDP 2.0 之后不少機(jī)器有了觸摸屏。這套代碼同時(shí)實(shí)現(xiàn)了pointerPressed但它不直接和鍵盤(pán)邏輯混在一起而是把觸摸坐標(biāo)換算成邏輯坐標(biāo)后交給同一套移動(dòng)接口protected void pointerPressed(int px, int py) { int lx px - offsetX; // 屏幕坐標(biāo) - 邏輯坐標(biāo) int ly py - offsetY; if (isInsideFireButton(lx, ly)) { player.fire(); } else { player.moveTo(lx, ly - 20); // 手指上方留 20 像素別被手指擋住 } }py - 20這個(gè)偏移量是上手之后改的手指落點(diǎn)和玩家以為的位置有偏差直接moveTo會(huì)讓飛機(jī)貼著手指下沿。操作方式上鍵盤(pán)機(jī)是「按住方向鍵持續(xù)移動(dòng)」觸屏是「拖哪走哪」兩套邏輯共用player.moveTo和player.moveBy兩個(gè)方法互不干擾。5. 避坑與排查真機(jī)上那五個(gè)最想砸手機(jī)的瞬間模擬器跑通只是開(kāi)始真機(jī)才是驗(yàn)收?qǐng)?。以下五條都是這套源碼在移植過(guò)程中實(shí)際遇到過(guò)的問(wèn)題按「現(xiàn)象、原因、解決」的順序?qū)懹龅酵钪苯映?.1 白屏與花屏圖片和屏幕尺寸的坑現(xiàn)象一模擬器正常裝到真機(jī)啟動(dòng)后一片白幾秒后自動(dòng)退出。原因基本鎖定在圖片資源上——導(dǎo)出的 PNG 帶了 32 位 alpha 通道或者用了真機(jī)解碼器不認(rèn)的非索引色格式。CLDC 上的 PNG 解碼器實(shí)現(xiàn)差異很大越老的機(jī)器越挑。解決辦法是把所有素材重新導(dǎo)出成 8 位索引色 PNG透明部分用純色鍵比如 0xFF00FF填充繪制時(shí)用drawRegion配合色鍵摳掉同時(shí)把單張圖控制在 128×128 以內(nèi)部分機(jī)型對(duì)單圖尺寸有硬上限?,F(xiàn)象二畫(huà)面能出來(lái)但整體偏到一邊右邊一條黑。這是getWidth()返回的寬度和實(shí)際可視寬度不一致導(dǎo)致的某些滑蓋機(jī)在合蓋狀態(tài)下報(bào)的是內(nèi)屏寬度。解決方式是在sizeChanged(int w, int h)回調(diào)里重新計(jì)算偏移量而不是在構(gòu)造函數(shù)里算一次就存成常量。這個(gè)回調(diào)在屏幕旋轉(zhuǎn)和開(kāi)合蓋時(shí)都會(huì)觸發(fā)是唯一可靠的時(shí)機(jī)。5.2 崩潰與內(nèi)存CLDC 的 API 紅線現(xiàn)象三玩到第三關(guān)黑屏退出日志里是OutOfMemoryError。兩個(gè)來(lái)源一是每幀new實(shí)體二是同一張圖被反復(fù)Image.createImage加載。前者的解法是第 3 章講的對(duì)象池后者更隱蔽EnemyManager里每種敵機(jī)如果各自加載一次貼圖同屏五架就是五份位圖在堆里。正確做法是建立Res類在startApp里把所有Image一次性 load 進(jìn)靜態(tài)字段之后全局共用同一份引用?,F(xiàn)象四編譯通過(guò)真機(jī)一運(yùn)行就NoSuchMethodError。說(shuō)明用了 CLDC 1.0 里沒(méi)有的 API但編譯時(shí)的 classpath 指向了 CLDC 1.1 的庫(kù)。常見(jiàn)嫌疑人是Float.valueOf、String.format、java.util.regex和Collections.sort的部分重載。查法很簡(jiǎn)單把工程配置里的 Configuration 改成 CLDC-1.0 再完整編譯一次編譯不過(guò)的地方就是雷區(qū)。真要用浮點(diǎn)就自己用整數(shù)放大一百倍來(lái)模擬別賭目標(biāo)機(jī)型支持。5.3 交互與存檔按鍵、RMS、音效三連坑現(xiàn)象五方向鍵完全沒(méi)反應(yīng)但確認(rèn)鍵能開(kāi)火。就是 4.2 節(jié)講的getGameAction返回 0加上數(shù)字鍵兜底即可。順帶一提有些機(jī)器在keyPressed里收到的是重復(fù)事件按住方向鍵會(huì)以極快頻率觸發(fā)導(dǎo)致飛機(jī)瞬移到邊界——加一個(gè)keyReleased里清標(biāo)志、keyPressed里判重的簡(jiǎn)單鎖就能壓住?,F(xiàn)象六最高分重啟后歸零。RecordStore寫(xiě)完沒(méi)關(guān)是頭號(hào)原因部分機(jī)型的數(shù)據(jù)要等closeRecordStore()才落盤(pán)代碼里必須在finally里關(guān)。第二個(gè)原因是 RMS 的作用域跟 MIDlet 套件綁定改了MIDlet-Name或者換了簽名之前存的數(shù)據(jù)就等于沒(méi)了——所以名字這東西定了就別動(dòng)。穩(wěn)妥的寫(xiě)法是加載失敗一律返回 0存檔失敗直接吞掉異常絕對(duì)不能讓存檔問(wèn)題把整個(gè)游戲拖崩。音效是同類問(wèn)題里的第三顆雷。Manager.createPlayer在缺少 MMAPI 支持的機(jī)器上會(huì)拋異常甚至直接NoClassDefFoundError。整個(gè)播放邏輯必須包在 try-catch 里并且先用Manager.isTypeSupported(audio/midi)探一下不支持就靜音降級(jí)游戲照跑。6. 二次開(kāi)發(fā)改造換一套美術(shù)、加一種武器之后怎么驗(yàn)證改造這套源碼最省力的順序是「先換皮、再改數(shù)值、最后加機(jī)制」因?yàn)槿叩尿?yàn)證成本是遞增的。換皮只需要看不崩加機(jī)制要玩得爽中間隔著幾十次真機(jī)重啟。6.1 換皮改動(dòng)面其實(shí)只有三處美術(shù)替換不要?jiǎng)哟a邏輯只碰三個(gè)地方res目錄下的 PNG 文件、Res.java里的尺寸常量、Entity子類里的halfW/halfH/radius。自機(jī)的機(jī)身窄radius給 6 到 8 就夠敵機(jī)體積大可以給到 14。改完一定要把BulletPool的容量重新算一遍——新美術(shù)如果讓子彈變大同屏能容納的數(shù)量就變了池子還是 64 的話會(huì)在密集彈幕時(shí)開(kāi)始丟子彈表現(xiàn)為「明明在射但打不中」。6.2 加一種武器從對(duì)象池容量到渲染順序加激光武器的最小改動(dòng)路徑是這樣的在BulletPool外面再開(kāi)一個(gè)LaserPool容量小一點(diǎn)8 條足夠因?yàn)樗鼈兣卸ù?、存在時(shí)間長(zhǎng)。渲染順序上激光要畫(huà)在普通子彈下面、背景上面否則會(huì)蓋住自機(jī)。數(shù)值上激光給「持續(xù)傷害」而不是「單次傷害」就需要在Entity上加一個(gè)dmgPerTick字段配合update(delta)按毫秒累加避免高幀率時(shí)傷害翻倍。做完這一步別忘了難度曲線也得跟著調(diào)——加了強(qiáng)力武器第四波的敵機(jī)數(shù)量不漲游戲就變成割草了。6.3 真機(jī)驗(yàn)證清單改完別急著打包按這張表過(guò)一遍能省掉大量返工驗(yàn)證項(xiàng)怎么驗(yàn)不通過(guò)先看哪里冷啟動(dòng)裝完直接開(kāi)不看任何界面Res.loadAll是否在 Canvas 之前掛機(jī)切回按掛機(jī)鍵 30 秒再切回startApp的canvas null判斷滿屏彈幕打到第三波觀察是否掉幀BulletPool容量與FRAME_MS判定手感貼臉躲彈看是否被誤判radius取值與syncCenter調(diào)用存檔打出最高分退出重進(jìn)closeRecordStore是否在 finally靜音降級(jí)在不支持 MIDI 的機(jī)器上跑音效 try-catch 是否完整這套流程我從第二個(gè)移植項(xiàng)目開(kāi)始就沒(méi)斷過(guò)。早期吃過(guò)虧模擬器上一切正常真機(jī)裝上去第一波敵人還沒(méi)出完就白屏了回頭查了整整兩天才發(fā)現(xiàn)是某張圖的 alpha 通道問(wèn)題。從那以后我每次改完一個(gè)副本都強(qiáng)制在真機(jī)上把所有波次跑滿一輪再打包不管改的是一行數(shù)值還是一次換膚。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲性图91| 中文字幕一区二区日韩网| 草草影院在线视频| 久久受www免费人成| 看看日B真人视频| www.99热| 岛国视频一二三区| 九九热三级片| 亚州男人的天堂| 91久久久久免| 影音先锋日本乱伦| 欧美性夜| 久久久无码精品人妻二区 | 亚洲狠| oumeisetu综合| 一区三区啪啪| 久草视频在线视频在线视频在线观看| 91天堂| 骚逼自拍99| 亚洲瓯美色图| 啊啊啊啊啊啊啊好爽不要| 欧美黄片视频在线观看免费| 一区二区三区 日韩欧美| 青青在线视频日韩欧美| 国产免费内射视频| 天天操天天日天天干| 精品超碰中文在线| www.夜夜| 黄片直播三级黄片两女一男| 性饥渴少妇av无码毛片| 国产对白刺激视频| 日产欧美电影一区二区三区| 97视频在线播放| 深喉吞精| 97天堂| 高精欧美色| 青青草中日韩在线| 色欲人妻一区二区在线| 久久超碰、| 热天堂一区二区| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 久久大黄片| 密臀视频三区免费网站| 91丝袜人妻| 97国产天堂岛| 久久久久亚洲一区女同性恋中文字幕| 欧美日日夜夜| 91总综合网| 天天综合网91入口| 一品道视频一区二区三区| 激情综合婷婷| 五月天婷婷综合网| 能看的av| 青苹果影院男人的天堂| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久热伊人99re| 999综合网| 久久久一区二区三区四区五区| 色九九九九九九| 久久久性少妇| 97亚洲在线| 色欧美在线| 亚洲区 欧美区| 亚洲乱妇p22| 日本高清免费一本视频在线观看| 四虎国产精品永久入口| 92性色国产午夜福利在线661| 国产中出内射一区二区| 国产女人和拘做爰视频 | 91婷婷伊人狠人| 嗯嗯啊啊操死我| 台湾大香蕉99热| 九九九九九九视频| 久久少妇人妻| 精品对白久久不卡| 超碰国产精品久| 色综合尤物| 国产亚洲综合欧美一区| 人妻日日夜夜精品| 日韩少妇在线视频| 麻豆国产97在线| 91操熟女| 亚洲五月婷| 欧美专区第一页| 日韩AV电影网站| 欧美日不卡| 91超碰碰在线| 97综合在线| 乱伦强奸区日韩| 神马久久久久久伦理片| 色色色热| 中文字幕AV片| 天天看天天日| 97摸视频| 我爱搞逼综合网| 青草一区二区| 911粉嫩人妻| 久久国产精品91| 欧美 亚洲 另类 综合| 五十路成人在线视频二区三区| 久久超碰com| 老熟女乱伦一区| 日本在线激情一区二区三区| 96免费视频在线| 国产一二三福利视频网| 久久久久久电影| 久久黄黄| 亚洲第一视频 欧美风情 日韩| 在线日韩精品一区二区三区| 亚洲中文字幕三级在线| 亚洲熟妇熟在线电影视频| 中文字幕精品亚洲熟女| 丰满人妻一区二区三区四区| 99热这里是精品| 激情视频一二三| 国产精品一区二区三区免费视频| 久久久精品网| 色婷婷综合网站| 伊人久久大香蕉线AV五月天| 97欧美视频| 国产精品亚洲免费| 91痴汉| 天天搞在线综合网| 亚洲大色堂| 国产精品操| 久久婷婷五月天| 日韩国产九九精品一区二区三区毛片| 13小男生GAY自慰脱裤子| 婷婷激情五月综合| 東南亚性呦成人伦理资源在线视频| 日韩 欧美 视频 在线 一区| se,,,亚洲欧美| av网站免费线看| 后X久久| 中文字幕av一区二区三区人妻少妇 | 国产激情在线| 久久9精品网站| 97任你吞精| 欧美午夜视频| 久久成人国产| 久热精品在线| 亚洲av影音先锋| 国产欧洲精品亚洲午夜拍精品| 97色97干| AV老汉| 亚洲图片色图欧美另类| 成人欧美日超碰| 日韩激情啪啪啪| 九九九九九九九精品视频| 亚洲综合色在线| 欧美成人一区二区三区在线播放| 好爽免费视频,| 精品国产乱码久久久久久口爆网站| 无码操逼天堂| 日本在线一二 | 天美传媒av在线| 国产九九九九九九九九| 亚洲资源站| 啊啊啊啊啊在线观看网址| 一区二区三| 国产精品999aaa| 一区二区久久天天干狠狠| 午夜男女爽爽大片免费观看| 校园春色亚洲无码| 久久香蕉综合一本到3atv| 国产91专区| 三级三久久线久久99久目本WW| 亚洲另类色综合网站| 九九av| 午夜性生活av免费在线看| 99国内精品| 亚洲无吗在线视频| 亚洲成人贴图| 农村少妇久久久久久久| 久久久人体| 中文字幕人成乱码熟女香港| 无码二级三级| 日韩激情视频| 99久久精品国产高潮| 神马麻豆福利院| 日韩在线人妻网站| 六月丁香久久| 亚洲性爱无码乱伦av| 天天综合中文字幕 91| 动漫片子网站3黄| 欧美国产伊人久久久久| 欧美影院一区二区三区| 性爱AV天堂| 欧美日韩99| 人人看人人爰人人操| 96精品久久久| 亚洲在钱| 国产乱弄免费在线视频。| 六月丁香啪啪| 九九色综合| 欧美精品1区2区3区| 亚州AV无码国产精品| 亚洲欧美综合| 欧美激情1区| 天天享受天天看| 丁香五月综合| 大色综合网| 欧美福利视频啊啊啊啊 | 欧美日韩另类在线播放| 97射欧美| 热热色AV| 9997se| 91久久伊人婷婷青青草| 婷婷日韩一区二区三区中文字幕在线| 精品人体无圣光凹凸| 久久78| 日本新免费二区三区| 蜜臀久久一区二区| 啪啪啪大香蕉| 熟女日韩| 91粉芽高清在线一区二区| 在线精品福利免费播放| 国产精品成人蜜臀AV在线| 欧美性爱日韩高清| 国产丝袜美女在线一区| 欧差乱伦二三| 熟妇xxxxx性春色| 精品九九九九九| 97人人夜| 69精品| 麻豆天美91| 亚洲丰满很很操| 天天超级碰碰碰| 91欧美高清| 精品人人| 欧美人妻二区三区| 97在线资源| 18禁久极品美女久久哦哟呀!| 99热在线不卡| 999九九精品| 久久9免费视频| avav青青草久久夜| 五月婷婷激情综合| 久久秀这里有精品| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 天天操天天插| 九热久| 亚洲熟女一区| 97爱爱爱| 欧美91精彩| 丁香五月天激情网站| 日本熟妇自慰性高潮一区二区三区| 啪一啪免费视频| 后入人妻无码| 动漫片子网站3黄| 久久精品国产亚洲AV清纯| 天天碰操中国年青熟妇| 一个国产在线综合网站| 男人的天堂kva| 国产乱码久久| 免费观看国产小粉嫩喷水精品午| 欧亚 另类 久| 麻豆国产av网| 亚洲国产欧美中日韩成人综合视频| 午夜精品久久久久久久久久久久久| 北京专精特新企业招聘信息| 91社区拍啪人妻| 东京热毛片调教| 欧美日韩超碰在线| 久久精品三级影视| 国产日逼视频| 尹人免费观看视频在线| 97视频播放| 国产久久一区二区三区野外在线| 亚洲黄网在哪免费看| 国产精品天堂| 亚洲 图片 欧美 色图| www黄片免费看com| 影视综合无码少妇| 国产精品美女视频诱惑| 中文字幕熟女人妻丝袜丝| 熟妇视频一区二区三区在线观看| 亚州操逼网| 免费国产电影一区二区| 麻豆亚洲AV成人无码久久精品| 日韩三级在线观看mp4| 欧美一区二区亚洲天堂| 亚洲伊人a线观看视频| 亚洲不雅视频1区二区| 岛国A V在线免费看| 日韩精品亚洲一二三| 午夜精品久久久久| 淫色网综合| 久久激情视频| 96久久精品一二三区色欲| 欧美福利视频啊啊啊啊| 91久久国产精品| 色网综合网| 97精品视频免费| 国产女上位好爽在线| 天天日天天干天天整| 国产成人精品必看| 黑人精品XXX一区一二区| 欧美性色欧美| 97资源站日韩| 久操免费观看| 熟女91网站| 91天美免费| 午夜福利合集| 精品少妇一区二区三区| 色欧美色交综合| 色眯眯av| 久久精品人妻一区二区三区| 人妻五十路在线| 亚洲夜色在线| 91色婷婷综合久久中文字幕二区| 国产精品青草综合久久| 欧美综合区| 国产久久久久久久久一区二区| 国产自产自拍| 一区二区三区 日韩欧美| 激情综合网激情综合| 91综合色噜噜| 人人妻碰人人免费| 精品毛片av一区二区| 国产日韩手机视频在线| av网站在线观看了| 亚洲制服欧美另类内射| 91free福利| 亚洲精品亚洲人成人网| 成人黑料社久久| 日韩欧美午夜视频在线| 色综合天天| 亚洲无码?第一页| 天天色综亚洲91污| 黄色片大香蕉| 亚洲人妻一区二区三区| 熟妇女人妻呻吟久久AV| 伦在线97| 性欧美999| 91日韩国产欧美亚洲另类精盘州至城都 | 国产后入精品| 尹人免费观看视频在线| 免费看黄视频亚洲网站| 亚洲αv一区二区三区| 404操逼福利视频| 十八禁啪啦拍视频无遮挡| 五月丁香六月激情综合| 毛片视频白嫩| 亚洲drav色图| 亚洲人天堂| 麻豆国产精品午夜视频| 国产精品一级特黄aaa大片在线观看| 牛黄色久午久| JULIA一区二区三区在线播放| 日韩欧美视频青青| 日本久久综合| 亚洲综合另类| 色综合av男人天堂| 亚洲天堂区| 日影院久久婷婷夜夜网| 91老司机精品| 强奸乱伦中文字幕AV| 国产激情久久| 伦理弟一页| 天天干嫩逼网| 极品尤物女神在线观看| 亚洲国产一区二区三区在线| 97久久国产亚洲精品超碰热| 国产又黄又粗的视频| 久久男人的天堂| 国内精品a| 日日夜夜干| 国产久久久久影院老熟女| 精品999999| 久草免费在线一区二区| 欧美亚洲激情小说| 91久| 人人看人人摸人人色| 超碰午夜在线| 欧美亚洲中文| 色999;丁香五月| 九九综合久久中文字幕| 超碰亚洲97| julia ann久久| 欧美性生活男人的天堂| 亚洲成人av色网| 色97综合中文字幕| 韩国一级婬片A片无码天美| 色嗨嗨在线| 婷婷情色五月天| 激情小说亚洲色图| 婷婷综合| 青娱乐黄色录像| 日韩 欧美 另类 人妻| 熟女色图在线| 中文字幕高清精品一区| 伊人97色天使| 国产精品久久久久久亚洲色欲| 久久婷婷精品| 欧美草草高清日韩视频| 国产在线视视频有精品| 综合色久欲| 国产精品久久久久亚洲av| 草蕉影视亚洲无码| 色色九区| 91黑人无码激情在线| 精品乱码在线观看| 人人爱人人操人人性| 欧州色图区| 国产精品九九九| 国产人妖视频一区在线观看| 亚州欧美综合| 亚洲女毛多水多21P| 久久久国产精品亚洲精品| 素人一区二区三区日韩| 中文字幕伊人| 色999五月色| 99在线视频播放| 亚洲精品国产熟女| 射丝袜大香蕉| 欧美日本一区二区a人| 亚洲999综合| 国产福利av精彩对白| 国产av色网| 操婷婷逼| 黑人猛交| 中文?日韩?免费?精品| 亚洲AO在线| 麻豆天美91| 91撸色网 玖玖网 欧美| 2019久久久久久久久福利| 成人精品欧洲亚洲| 久久婷婷热| 欧美亚洲图片| 色呦呦、国产精品| 国产无马视频| 日本不卡在线二区三区| 第45页一区二区| 亚洲最大成人a毛毛片| 91欧美另类| 久操不卡视频| 一区二区影视| 成人热久久精品| 日韩乱伦视频| 激情小说亚洲| 天天综合网合集91| 超碰色中文| 欧美经典一区二区三区| 哈哈操电影| 大香蕉宅男伊人| 去干网最新版| 久久欲| 国产一区二区精品久久久不卡蜜臀| 五月丁香六月激情| jk白丝没脱就开始啪啪| 大色综合| 欧美另类天堂| 黑人与人妻| 91干熟女| PMv在线观看| 超碰视97中文| 精品176精品2| 久久男人的天堂国产| 中文字幕在线观| 日韩精品国模| 国产农村妇女精品1区二区| www.色婷婷色综合| 亚洲精品一二区| 色五月AV| 天天操妹子| 午夜福利在线合集| a片自拍直播视频| 少妇熟女视频一二三区| 99久在线精品99re8| 天天射夜夜操| 九九九九AV| 免费97视频| 亚洲国产第一页综合视频| 亚洲国产精品成人综合| 天天做天天爱| 婷婷激情丁香| 久久久久久人| 91无码人妻| 在线视频五十市| 97福利视频| 国产日逼视频| 天美精品原创av片国产| 日本97久久| 国产亚洲日本| 嗯嗯啊啊好大好爽| 久久最新视频免费观看| 高清不卡国产| 素人美腿视频网站| 久久久精品国产亚洲AV无码| 日韩亚洲中文字幕在线| 中文字幕乱在线伦视频中文字幕乱码在线 | 久久人妻一区二区三区高清| 97超碰人操| 久神马| 69久久久久久久久久久久久| 欧美97视频| 欧美日本天堂| 欧美在线55555| 天综合网| 97网址www| 日韩另类| renqi久久久久久久久久久久| 亚洲 自拍偷拍 欧美| 免费久久一级毛片大黄| 啊啊啊好大好深| 91熟女网| 东京热天堂网| 久久性爱视频免费看| 骚女天天综合网| 欧美黑人日韩少妇色情| 欧美 日韩第一性色| 欧美日韩淫加| 天天天天天超碰| 中出后入| 在线观看啊啊啊啊啊| 中国91AV| 懂色Av| 大香蕉一区二区在线观看.| 日韩欧美亚洲自拍偷拍| 日本高清视频xxxx| 亚洲乱码国产乱码精网站| 欧美特大黄一级片片免费| 无码少妇精品一区二区60岁老人 | 性欧美91| 亚洲熟伦熟妇AV无码春色| 欧美亚洲素人制服精品| 思思热免费视频观看| 婷婷丁香六月天| 久久精彩视频9| 蜜臀av中字字幕网站| 九X超碰| 蜜臀一二三区| 中文久久| 亚洲欧美国产成人综合不卡| 久久极品伊人| 久久九精品| 操淫穴亚洲五月丁香| 亚洲人久久久网| 中国和日本人色哪个不下载能放| 91色宗合| 色色色色日本| 人妻啊啊人妻啊| 嗯嗯啊好大| 清纯唯美综合| 操逼日批| 国产一级黄色片在线观看| 婷婷久草一区二区三区| 精人妻无码一区二区三区伊人直播| 校园春色 亚洲| 久久久久亚洲三级电影| 九九热免费视频| 最新加勒比丝袜在线| 色娱乐色呦呦夜夜夜夜av| 在线视频资源| 黄片色区软件| 91精品久久久久久77777| 天美传媒一二三区永久网站| 99re在线视频国产| 日韩精品中文字幕人妻| 婷婷在线精品| 精吧天堂| 无码一区二区精品视频久久久春药| 亚洲精品久久久久久久蜜桃臀| 天美一二三在线观看Av| 午夜男人的天堂| 性爱乱伦网址| 熟女欧美日韩综合婷婷| 成人免费性爱视视| 日韩黄色成人性爱| 亚洲有码第一页| 亚洲高清欧美总合| 超碰人人在线| 国产欧美日产一区二区三区 - 国产欧美日 | 翔田千里Av在线| 久久精品国产免费观看99| 亚洲视频一二区| 乱欲视频| 久久小视频| 久草电影网| 看一级特黄a大一片| 久久、1234| 国产综合色精品在线观看| 色婷婷丁香五月天| 欧美色97| 一级特级aaaa毛片免费观看 | 中文久久| 人妻久热在线| 久久久999| 国产精品一区二区三区在线密挑| 99热婷婷一区二区三| 国产又操| 欧美日韩妖精91com| 国产又大又硬又长又粗| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 农村女一级毛卡片| 美女啊啊啊啊啊啊啊| 91无摭挡| 国产真实野战在线视频| 久久久精品中文字幕麻豆| 亚洲AV性爱电影| 精品中文日韩字幕视频| 色欲Av人妻精品一区二| 好吊色一区| 欧美亚洲一级在线观看| 久久久九九九九| 在线观看岛国有码| 欧美色综合图片| hd成人一区二区在线| 91欧美巨乳| www.色操逼| 国产路线专区| 亚洲熟妇丝袜在线观看| 亚洲最新Av| 91殴美大片| 丝袜剧情| 国产91美女视频| 日本在线不卡123| 久久精品国产精品一区| 九九九九九九九九九五码| 久久久久久国产无码精品| 超碰 欧美| 国产又操| sewuyueav| 欧美黄色图片| 一级A片女人高潮叫床| 三及片网站| 欧美熟妇精品黑人巨大一二三区| 国产一级不卡在线观看| 欧美日韩小说| 蜜桃精久三区| 欧美成人午夜免费福利785| 久久精品国产亚洲av水密被窝| ,国产乱人伦精品一区二区三区| 欧美呦呦性爱| 日韩欧美久久婷婷网站| 婷婷五月综合在线| 欧美日韩操逼动图| 天天亚洲| 麻豆人妻偷人精品无码视频| 天天综合网站| 手机在线视频国内精品| 偷拍盗拍亚洲色图图片| 日韩午夜国产| 久色网| 成人免费看吃奶视频网站| 午夜操操操| 色鬼在线综合| 九九久久99| 性暴力欧美猛交在线直播| 91中出视频| 天堂伊人久久| 超碰爽人妻熟女Av| AV中文在线| 我要去看2个日本美女.com曹逼| 欧美亚洲涩涩| 六月丁香网| 亚洲av影音先锋| 国产无码精品久久久久久| 亚洲情色综合网| 亚洲熟妇丝袜在线观看| 五月天色色网站| 超碰在线欧美性爱激情| 2017天天插| 亚洲人综合| 色五月天AV| 人人乐大香蕉| a级成人毛片免费视频高清| 久久精品无码一区二区三区| 精国久久一区二区三区98| 精品无码一区二区| 色色五月天激情| 一起草精品人妻| 国产成年女人免费视频播放a| 久久久久白虎| 色噜噜日韩精品| 吉川爱美亚洲二区在线| 无码人妻丰满热妇又大又粗| 俞拍久久国应视频| 夜夜躁狠狠躁日日躁av| 人人操人人肉久久精品| 啊啊啊啊无码| 男人的天堂一区| 夜夜爽夜夜操| 精品91日日夜夜超清资源| 风月影院十八禁| 超碰欧美| 亚洲国产av中文字幕久久| 亚洲,日韩,欧美,成人播放| 国产精品一区二区校花| 强歼乱伦资源网| 国产亚洲精品自在线亚洲情侣| 成人电影一区| 97精品国产97久久久久久户外免费| 精精夜夜| 97碰碰日本乱偷人妻中文的| 亚洲丰满很很操| 999国产精品999久久久久久| 亚洲资源站| 激情小说图片亚洲首页| 日本三级一区二区 在线| 国产第25页在线观看| www狠狠| 看看小穴| 极品久久久久久久久久久久久久| 日本中文字幕熟妇| 久操国产在线| 99视频这有这里有精品| 韩日无码在线观看| 中文字幕二区日韩天堂| 色五月第四色| 欧美日韩一二三| 久久久久久久免费A片国产成a人亚洲精∨品无码| 黄色免费一级在线毛片| 午夜电影在线观看无码专区| 久热91| 亚洲丝袜B诱惑| 亚洲涩图欧美| 欧美不卡五十路| 中文操嬖片。| 禁止观看美女黄| 97jingpin| 91香蕉国产尤物视频| 婷婷激情五月天小说网| 美女露胸露屁股| 天天日熟妇| 日韩成人高清一区二区| 很很热性爱视频| 日韩中文字幕熟妇人妻| 我想要啊 啊 啊| 日本成熟少妇A∨网站| 俺去俺来也在线www| 亚洲不卡av在线| 综合亚洲网| 99色热国产视频精品| 日韩av女优在线免费一区| 五月开心久久AV官网| 97综合国产| 无码免费精品高清| 亚洲成人精品久久久| 精品久久97| 8050无码八戒| 欧美亚洲涩涩| 强被迫伦姧在线观看无码网站| 人妻熟女av国产网站| 二对二中文字幕。| 中文字幕在线免费观看| 丝袜美腿制服人妻二区中文字幕| 欧美综合第一| 亚洲欧美情色| 99综合视频| 蜜桃臀一区二区aV| 久久无码成人| 天堂麻豆天美| 人妻色偷色噜| 欧美亚洲国内自拍| 中文区中文字幕免费看| 免费看A片毛毛片在线播| 人人性爱视频免费| 又黄又爽在线观看视频| 中日韩免费看男女操逼大全| 日本三级R| 玖玖无码超碰| 天天日天天爽| 国产熟妇 码视频户外直播| 久久精彩免费视频| 午夜传煤十二区精品| 性爱av在线免费观看| 午夜福利合集| 人人天天欧洲| 欧美精品23| 久久久91福利姬| 久热免费视频| 中国zzijzzijzzwww精品| Aa东京男人的天堂| 亚洲91少妇| 久久男人精品| 亚洲97综| 97欧美久久久久久久| 久久色人体 | 中文字幕黄片在线| 久久亚洲天堂| 亚洲综合性感在线| 丁香婷婷色五月| 欧美亚洲色图另类国产| 久久久久久久精| 情色大香蕉| 学生妹天天看| 91jk色拍| 亚洲。日韩。欧美| 色色激情| 欧美刺激色黄片免费看| 成全在线观看免费观看| 久久国产乱子伦精品免费女,网站| 色婷婷一区二区三区久久午夜 | 亚州男人天堂| 亚洲综合在线91| 亚州图片第一页| av东京热男人的天堂| 操逼内射干逼白丝91| 国产精品久久久久久夜夜夜| 久久丁香| 欧美.亚洲.另类.丝袜.制服.诱惑| 日本性爱网址| 嫩草影院在线观看精品| 国产高清在线观看欧美| 日韩黄片视频试看| 美国aaaaa一级黄片| 久久精品店| 色色婷婷五月天| 欧美日韩成人在线| 99国产精品人妻人伦| 久久久9品一区二区三区| 精品福利视频| 久久视网78| 亚洲日韩熟女人妻高清在线| 91性感网站| 乱色老一区二区三区的观看方式| 少妇色综合| 99re欧美| 1级黄色夫妻对换性交免费看| 中文字幕一区二区三区高清| 探花在线免费观看视频国产一区| 韩国三级理论在线| 欧美 色 亚洲| 亚洲精品国产AV天美传媒| 日韩人妻少妇中文字幕| 夜夜嗨一区二区| 操熟女91| 嗯嗯啊啊视频一区二区三区| 久久一二三四五六七八九区区区| 五月天激情小说| 91最新综合| 美女黄色91| 久久夜夜| 欧美国产日韩高清在线| 老女人爆菊| 人人人干干人人干| 欧洲射精91| 日产操逼| 成人av动漫在线观看| 日本色色色视频| 婷婷伊人一区| 日韩大香蕉| 久久激情综合| 日夜尻逼网| 亚洲宅男天堂| 97国产超湿| 91网站18禁| 啊啊啊好湿久久| 亚洲AV噜噜狠狠网址蜜桃动漫| 精品人妻一区春色| 五月婷婷久久综合| 天天综合91| 人人操人人射人人干| 午夜大香蕉| 色屁屁影院www国产| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 久草精品在线| 欧美熟妇视频| 国产精品免费美女视频| 综合色好色| 五十路熟女在线不卡观看一区二区| 插入逼91| 91男女啊啊啊| 国产精品毛片| 亚洲成人久久美女| 欧美综合第一页| 欧洲大香蕉| 欧美色天堂网在线视频| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美人与动性人交a| 国产精品视频电影| 国产在线强奸视频| 日韩在线观看AV| 99久久无色码| 强奸乱伦Av网| 久久久久国产精品久久久| 精爱久久| 另类在线| 国产天天骚| 日韩无码黄色片| 夜夜国自区| 操屄不卡视频| 精品视频一区二区| 欧美黄色大香蕉一区二区| 91国产丝袜白虎| 日日干夜夜操视频h| 人人做人人妻人人夜视频| 亚洲一区二区AV| 亚洲熟女少妇免费视频| 91丝袜在线观看视频在线观看| 精品国产Av无码久久久伦古装| 熟妇人妻一区二区三在线| 老熟妇一区二区三区…| 天天内射| 97任你吞精| 国产在线视频午夜精华在| 日韩综合97P| 亚洲限制级在线| 亚洲春色激情小说| 操一区| 91干熟女| 综合欧美日韩在线观看| 色y情视频免费看| 久久人妻| 中文字幕在线免费观看| 欧美激情精品久久久| 日韩精品大香蕉伊人在线| 精品久久久久瑟瑟| 手机av天堂久久久久| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲中文字幕有码视频一区二区三区| 久久AV无码AV| 操一区| 大色综合网| 欧洲成人性爱视频| 久久天天艹| 6080YYY午夜理论片在线观看| 无码国产精品96久久久久孕妇| 超碰97男女| 91夜色| 日韩综合成人免费视频| 亚洲色欲天天天堂色欲网女| 久久精品人人做人人看| 伊人久久综合影院精品久久久| 偷拍 欧美 日韩| 377p欧洲日本亚洲大胆| 粉嫩av在线一区二区| 天天日天天色| 99re9这里只有精品| 一级黄碟在线看| 四虎av在线| 黄色大片视频在线免费看| 蜜乳AV免费观看| 国产精选三级在线观看| 又黄又爽在线观看视频| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国产精品 久久久精品一牛| 韩国黄片aaaa| 亚洲av乱伦色图网站| 免费观看有码高清视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 久久香蕉国产线看观看猫咪av| www99热| 免费成人在线熟妇网| 成人区人妻精品一| 日韩免费三级黄片电影| 欧美日韩性爱视屏免费看了| 超碰激情808| 91精品人妻一品二品三品| A级在线视频| 九九伊人网| 美女91色黄18| 日欧操屄| 97超碰天天| 亚洲欧美色图片| 久久久A∨| 国产精品夜夜夜| 91精品人妻电影| 欧美午夜视频| 亚洲图片色图欧美另类| 欧美性爱一内片一区二区三区| 欧美瑟综合| 操一区| 国产白丝网站| 99久久婷婷国产综合精品草原| 国产精品天干天干综合网麻豆| 69XX一中文字幕人妻91| 999狠狠综合| 91欧美亚洲| 欧美精品成人亚洲| 看日韩黄片| 日韩一级二级在线| 熟女这里只有精品6| 婷婷色网| 免费A V在线播放| 久久网亚洲| av九九| 欧美日本成人一区二区| 国产精品乱人伊人网| 被男人吃奶很爽的毛片| 91九九九逼| 国产精品自在线发布| 夜夜骑日日| 五月丁香婷婷色| 少妇激情一区二区三区视频| 丰满人妻一区二区三区免费,| 性色亚洲| 天天舔九色婷婷| 99精品国产户外露出| AND人妻系列| 97国产超碰| 久久鲁夜| 色色婷婷五月天| 91免费看一区二区三区| 亚洲视频二区 | 九一精品牛牛一区二区| hd成人一区二区在线| 综合久久2017| 99蜜桃臀久久久欧美精品网站| 免费久久精品麻豆一区二区av| se..亚洲欧美| 大香蕉青青9| 花野真衣| 色优久久| 一区二区三区探花在线观看| 97欧美日韩综合| 亚洲日韩乱码中文无码蜜桃臀网站| 婷婷亚洲综合| 亚洲午夜福利在线影院| 国产 日韩 欧美一区| www.91视频网| 人人澡人人澡人人| 女生自91网站| 久久精品视频28| 久久久久久性爱片| 色五月激情网| 成年女人18级毛片毛片免费观看| 欧美日韩不卡a片| 国产精品不卡av免费在线观看| www.91视频网| 大茄子熟女AV导航| 日日嗷| 久久东京热成人| 中文字幕欧洲有码| 久操免费电影| 美女t无毒不卡不卡| 欧美日韩制服| 亚洲色电影在线| 大鸡巴久久| 欧美不在线| 欧美色人| 狠狠操官网| 18禁精品网站在线看| 国产精品久久久久久 百度| 最新中文字幕在线亚洲| 91人妻中文| 九九色热| 97超碰天天| 啊啊啊啊啊啊啊在线| 锕锕好爽 死我在线观看| 欧美色亚洲色| 600国产精品视频| 久久久久亚洲熟妇熟女| 日韩中文字幕精品一区在线| 欧洲一级性爱视频在线观看| av国产无码| 国产又色又爽又舒服的三级视频| 国产午夜福利电影免费在线观看 | 蜜臀亚洲中文| 亚洲91大片| 综合久久9| 美女写真| 精品91摸| 熟妇一区,二区,三区。| 日日夜夜摸| 91|九色|国产熟女| 亚洲五区熟女| 99少妇内射| 国产综合网站在线播放 | 99热这里只有精品地址| 人妻精品综合中文字幕在线 | 色妺妺在线视频| 亚洲日韩狠狠撸视频| se吧提供91精品国产91久久久久久| 日韩丝袜二区| 久操操| 欧美狠狠| 一本道综合色图| 欧洲人妻视频| 在线观看日韩av不卡| 青青草伊人久久| 99色网| 伊人综合色网| 97网站在线观看 | 国产又黄又爽又刺激久久久久久| 五月天婷婷基地| 国产中文字幕在线| 久久精品毛片免费不卡| 亚洲影院小综合| 亚洲无992tv| 欧美美女自慰一区二区三区| 97 国产精品| 亚洲中文字幕精品久久久久久直播| 日韩人妻精品中文字幕| 男人天堂黄片| 老汉网| 亚洲中文日韩欧美大香蕉视频| 大香网伊人久久综合网eew| 在线人成亚洲视频免费观看| 亚洲狼狼干综合1| 日韩精品在线视频在线观看| 97se综合网| av在线一区二区三区| 欧洲亚洲综合| 欧美色色色| 人妻天天爽天天爽三区| 精品无码一二三四区| 亚洲 一区二区 自拍| 深爱伊人影院| 国产精品久久久鸭无码的功能| 丁香五月天社区| 在线观看A啊啊啊| 成人国产二区三区在线,男女精品。| 97资源视频| 精品一区二区久久| 亚洲人妻一区二区三区| 探花精品 一区二区| 久久久九九网站| 亚洲图片 欧美电影| 91亚洲欧美综合高清在线| 嗯嗯啊啊好疼| 欧美人妻中出| 天天躁狠狠躁av| 亚洲黄色网址| 操淫穴亚洲五月丁香 | 国产女人91精品嗷嗷嗷嗷| 久久9亚洲| av在线资源| 国产激情片在线观看| 韩国三级理论在线| www.av在线观看| 免费一级毛片在线视频观看| 久久无码电影| 五月丁香啪啪网| 免费精品99| 天天欧美欧美亚洲网| 按摩中文字幕| 绑缚麻绳人妻寝取完整版| 久久久中文版| 九热超碰| 91性情| 国产精品电影大全| av天堂精品久久| 蜜桃av综合网发布| 亚洲午夜免费狠狠干| 青青草视频久久久久| 少妇久久久久久| 岛国大片国产| 丁香五月激情啪啪| 人妻插插人妻人| 欧亚韩国999| 日本阿v天堂在线观看| 欧美同性恋 的搜索结果 - 91n| 1024手机看片欧美日韩| 欧美情色贴图| 日本超碰色精品| 精品一区二区久久| 夜夜嗨一区| 超碰在线日韩一区| WWW啪啪的com| 伊人成人中文字幕久久网| 青娱乐 成人娱乐在线| 99re8超碰| 中文字幕av一区二区三区人妻少妇 | 成人福利视频网| 看日韩美女二区三区免费操逼视频 | 天美AV片| 老鸭窝在线视频播放|