日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

flappy bird游戲源代碼揭秘和下載 —— 可運(yùn)行于android、ios和html5多平臺(tái)

瀏覽:56日期:2022-09-17 14:49:00

背景:

最近火爆全球的游戲flappy bird讓筆者嘆為觀止,于是花了一天的時(shí)間山寨了一個(gè)一模一樣的游戲,現(xiàn)在把游戲的思路和源碼分享出來(lái),代碼是基于javascript語(yǔ)言,cocos2d-x游戲引擎,cocos2d-x editor手游開(kāi)發(fā)工具完成的,請(qǐng)讀者輕砸;

ps:運(yùn)行demo必須配置好cocos2d-x editor,暫不支持其他工具。還有demo是跨平臺(tái)的,可移植運(yùn)行android,ios,html5移動(dòng)系統(tǒng)等;

Android Apk下載:(演示效果)

暫時(shí)只移植打包到android系統(tǒng),可下載運(yùn)行看看效果;

騰訊微云:http://share.weiyun.com/cac18d8c58d40bf2401b3fdeeb6bcb2f

代碼下載:

百度云盤(pán):http://pan.baidu.com/s/1pJnWDb9

代碼如何移植到各平臺(tái):

?Android:http://blog.csdn.net/touchsnow/article/details/19176091

html5: ? ? ??http://blog.makeapp.co/?p=245

效果圖:

flappy bird游戲源代碼揭秘和下載 —— 可運(yùn)行于android、ios和html5多平臺(tái) flappy bird游戲源代碼揭秘和下載 —— 可運(yùn)行于android、ios和html5多平臺(tái) flappy bird游戲源代碼揭秘和下載 —— 可運(yùn)行于android、ios和html5多平臺(tái)

開(kāi)發(fā)工具:

cocos2dx editor,它是開(kāi)發(fā)跨平臺(tái)的手機(jī)游戲工具,運(yùn)行window/mac系統(tǒng)上,javascript腳本語(yǔ)言,基于cocos2d-x跨平臺(tái)游戲引擎, 集合代碼編輯,場(chǎng)景設(shè)計(jì),動(dòng)畫(huà)制作,字體設(shè)計(jì),還有粒子,物理系統(tǒng),地圖等等的,而且調(diào)試方便,和實(shí)時(shí)模擬;

cocos2dx editor 下載,介紹和教程:http://blog.csdn.net/touchsnow/article/details/19070665;

cocos2dx editor官方博客:http://blog.makeapp.co/;(請(qǐng)持續(xù)關(guān)注版本更新)

思路和源碼:

1 場(chǎng)景設(shè)計(jì)MainLayer.ccbx,如下圖;主要分三層,開(kāi)始場(chǎng)景、主場(chǎng)景、游戲結(jié)束場(chǎng)景,通過(guò)顯示隱藏控制三個(gè)場(chǎng)景的切換。

flappy bird游戲源代碼揭秘和下載 —— 可運(yùn)行于android、ios和html5多平臺(tái)

MainLayer.ccbx代碼

<?xml version='1.0' encoding='UTF-8'?><Document jsControlled='true' jsController='MainLayer' resolution='default'> <Resolutions><Resolution centeredOrigin='false' ext='iphone' name='default' scale='1'/><Resolution centeredOrigin='false' ext='iphone' name='default1' scale='1'/> </Resolutions> <Animations><Animation autoPlay='true' name='Default Timeline'length='10'chainedId='0'offset='0.0'position='0.0'resolution='30'scale='128'> <CallbackChannel> </CallbackChannel> <SoundChannel> </SoundChannel></Animation> </Animations> <LayerpositionX='0' positionY='0.0'sizeType='Percent' anchorPointX='0.5' anchorPointY='0.5' ignoreAnchorPoint='true'scaleX='1' scaleY='1' ><Sprite positionType='LeftBottom' positionX='0' positionY='0' anchorPointX='0'anchorPointY='0' src='http://m.b3g6.com/bcjs/Resources/bg.png' name='' var='' target='None' scaleX='1' scaleY='1' visible='true'/><LayerColor positionType='LeftBottom' positionX='0' positionY='0' anchorPointX='0'anchorPointY='0' color='#fff2e8ff' visible='false'/><Menu positionType='LeftBottom' positionX='356.0' positionY='237.0' anchorPointX='0.5'anchorPointY='0.5' scaleX='2.4' scaleY='1.725'></Menu><Sprite positionType='LeftBottom' positionX='0' positionY='0' anchorPointX='0'anchorPointY='0' src='http://m.b3g6.com/bcjs/Resources/ground.png' var='ground' target='Doc'/><Node positionType='LeftBottom' positionX='800' positionY='250' anchorPointX='0'anchorPointY='0' var='hoseNode' target='Doc'> <Sprite positionType='LeftBottom' positionX='-500' positionY='400' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/bird3.png' var='test' target='Doc' visible='false'/> <Sprite positionType='LeftBottom' positionX='-550' positionY='500' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/bird1.png' var='bird' target='Doc' scaleX='1' scaleY='1' rotation='0' visible='true'/></Node><Node positionType='LeftBottom' positionX='303.0' positionY='500' anchorPointX='0.5'anchorPointY='0.5' var='readyNode' target='Doc' visible='true'> <Sprite positionType='LeftBottom' positionX='95.0' positionY='584.0' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/getready.png'/> <Sprite positionType='LeftBottom' positionX='73.0' positionY='236.0' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/click.png'/></Node><Node positionType='LeftBottom' positionX='300' positionY='500' anchorPointX='0.5'anchorPointY='0.5' var='overNode' target='Doc' visible='true'> <Sprite positionType='LeftBottom' positionX='72.0' positionY='219.0' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/base.png'><Sprite positionType='LeftBottom' positionX='286.0' positionY='458.0' anchorPointX='0.5'anchorPointY='0.5' src='http://m.b3g6.com/bcjs/Resources/flappy_packer.plist/gameover.png'/> </Sprite> <Menu positionType='LeftBottom' positionX='0' positionY='0' anchorPointX='0.5'anchorPointY='0.5'><MenuItem positionType='LeftBottom' positionX='-65.0' positionY='-92.0' anchorPointX='0.5'anchorPointY='0.5' normalImage='Resources/flappy_packer.plist/start.png' target='Doc' onClick='onStartClicked'/><MenuItem positionType='LeftBottom' positionX='230.0' positionY='-92.0' anchorPointX='0.5'anchorPointY='0.5' target='Doc' normalImage='Resources/flappy_packer.plist/grade.png' onClick='onGradeClicked'/> </Menu></Node> </Layer></Document>

2 代碼編寫(xiě)MainLayer.js

首先,小鳥(niǎo)在向前飛,其實(shí)是底部的路和水管在向左移動(dòng),相對(duì)的你就感覺(jué)小鳥(niǎo)在向右飛了;路循環(huán)移動(dòng)代碼:

MainLayer.prototype.groundRun = function (){ var action1 = cc.MoveTo.create(0.5, cc.p(-120, 0)); var action2 = cc.MoveTo.create(0, cc.p(0, 0)); var action = cc.Sequence.create(action1, action2); this.ground.runAction(cc.RepeatForever.create(action));}

初始化高低不同的水管,每一關(guān)卡都由上下兩水管和空隙組成。總長(zhǎng)度相同,空隙也一定,隨機(jī)取下面水管的長(zhǎng)度,就形成錯(cuò)落有致的水管關(guān)卡;

MainLayer.prototype.newHose = function (num){ var hoseHeight = 830; var acrossHeight = 300; var downHeight = 100 + getRandom(400); var upHeight = 1100 - downHeight - acrossHeight; var hoseX = 400 * num; var HoseName = FP_MAIN_TEXTURE.HOSE; var ccSpriteDown = cc.Sprite.createWithSpriteFrameName(HoseName[0]); ccSpriteDown.setZOrder(1); ccSpriteDown.setAnchorPoint(cc.p(0, 0)); ccSpriteDown.setPosition(cc.p(hoseX, 0)); ccSpriteDown.setScaleY(downHeight / hoseHeight); var ccSpriteUp = cc.Sprite.createWithSpriteFrameName(HoseName[1]); ccSpriteUp.setZOrder(1); ccSpriteUp.setAnchorPoint(cc.p(0, 0)); ccSpriteUp.setPosition(cc.p(hoseX, downHeight + acrossHeight)); ccSpriteUp.setScaleY(upHeight / hoseHeight); this.hoseNode.addChild(ccSpriteDown); this.hoseNode.addChild(ccSpriteUp); this.hoseSpriteList.push(ccSpriteDown); this.hoseSpriteList.push(ccSpriteUp); return null;}

一開(kāi)始進(jìn)入游戲讓底部路不斷移動(dòng),初始化水管,顯示準(zhǔn)備游戲場(chǎng)景;

MainLayer.prototype.onEnter = function (){ cc.AnimationCache.getInstance().addAnimations('Resources/flappy_frame.plist'); this.groundRun(); this.ground.setZOrder(10); this.birdReadyAction(); this.bird.setZOrder(20); this.readyNode.setVisible(true); this.overNode.setVisible(false); for (var i = 0; i < 30; i++) {this.newHose(i); }}

點(diǎn)擊屏幕,小鳥(niǎo)向上飛60dp,然后更快的速度下落(移動(dòng)動(dòng)畫(huà)),同時(shí)閃動(dòng)翅膀(幀動(dòng)畫(huà));

MainLayer.prototype.birdRiseAction = function (){ var riseHeight = 60; var birdX = this.bird.getPositionX(); var birdY = this.bird.getPositionY(); var time = birdY / 600; var actionFrame = cc.Animate.create(cc.AnimationCache.getInstance().getAnimation('fly')); var flyAction = cc.Repeat.create(actionFrame, 90000); var riseAction1 = cc.MoveTo.create(0.2, cc.p(birdX, birdY + riseHeight)); var riseAction2 = cc.RotateTo.create(0, -30); var riseAction = cc.Spawn.create(riseAction1, riseAction2); var fallAction1 = cc.MoveTo.create(time, cc.p(birdX, 50)); var fallAction2 = cc.Sequence.create(cc.DelayTime.create(time / 6), cc.RotateTo.create(0, 30)); var fallAction = cc.Spawn.create(fallAction1, fallAction2); this.bird.stopAllActions(); this.bird.runAction(cc.Spawn.create(cc.Sequence.create(riseAction, cc.DelayTime.create(0.1), fallAction),flyAction) );}

檢測(cè)碰撞,如果小鳥(niǎo)碰到地面和水管,發(fā)生碰撞,這里碰撞直接用cocos2d-x 里面的圖片和圖片交叉函數(shù) cc.rectIntersectsRect;

MainLayer.prototype.checkCollision = function (){ if (this.bird.getPositionY() < 60) {cc.log('floor');this.birdFallAction();return; } for (var i = 0; i < this.hoseSpriteList.length; i++) {var hose = this.hoseSpriteList[i];if (!this.isInScreen(hose)) { // continue;}if (cc.rectIntersectsRect(hose.getBoundingBox(), this.bird.getBoundingBox())) { cc.log('hose positionX==' + hose.getBoundingBox().x); cc.log('this.bird positionX==' + this.bird.getBoundingBox().x); cc.log('i==' + i); cc.log('birdFallAction'); this.birdFallAction(); return; } }}

碰撞后,小鳥(niǎo)先下落,游戲結(jié)束場(chǎng)景顯示;

MainLayer.prototype.birdFallAction = function (){ this.gameMode = OVER; this.bird.stopAllActions(); this.ground.stopAllActions(); var birdX = this.bird.getPositionX(); var birdY = this.bird.getPositionY(); var time = birdY / 2000; this.bird.runAction(cc.Sequence.create(cc.DelayTime.create(0.1),cc.Spawn.create(cc.RotateTo.create(time, 90), cc.MoveTo.create(time, cc.p(birdX, 50)))) ); this.overNode.setVisible(true);}

游戲的難度主要在于多個(gè)水管的移動(dòng),小鳥(niǎo)觸摸動(dòng)畫(huà),檢測(cè)碰撞,我把Mainlayer.js所有代碼貼出來(lái);

FP_MAIN_TEXTURE = { FRAME_ANIMS: 'beanstalk/Resources/bs_main_anims.plist', HOSE: ['holdback1.png', 'holdback2.png']}READY = 1;START = 2;OVER = 3;var MainLayer = function (){ cc.log('MainLayer'); this.bird = this.bird || {}; this.ground = this.ground || {}; this.hoseNode = this.hoseNode || {}; this.readyNode = this.readyNode || {}; this.overNode = this.overNode || {}; this.passTime = 0; this.hoseSpriteList = []; this.isStart = false; this.gameMode = READY;};MainLayer.prototype.onDidLoadFromCCB = function (){ if (sys.platform == ’browser’) {this.onEnter(); } else {this.rootNode.onEnter = function (){ this.controller.onEnter();}; } this.rootNode.schedule(function (dt){this.controller.onUpdate(dt); }); this.rootNode.onExit = function (){this.controller.onExit(); }; this.rootNode.onTouchesBegan = function (touches, event){this.controller.onTouchesBegan(touches, event);return true; }; this.rootNode.onTouchesMoved = function (touches, event){this.controller.onTouchesMoved(touches, event);return true; }; this.rootNode.onTouchesEnded = function (touches, event){this.controller.onTouchesEnded(touches, event);return true; }; this.rootNode.setTouchEnabled(true);};MainLayer.prototype.onEnter = function (){ cc.AnimationCache.getInstance().addAnimations('Resources/flappy_frame.plist'); this.groundRun(); this.ground.setZOrder(10); this.birdReadyAction(); this.bird.setZOrder(20); this.readyNode.setVisible(true); this.overNode.setVisible(false); for (var i = 0; i < 30; i++) {this.newHose(i); }}MainLayer.prototype.newHose = function (num){ var hoseHeight = 830; var acrossHeight = 300; var downHeight = 100 + getRandom(400); var upHeight = 1100 - downHeight - acrossHeight; var hoseX = 400 * num; var HoseName = FP_MAIN_TEXTURE.HOSE; var ccSpriteDown = cc.Sprite.createWithSpriteFrameName(HoseName[0]); ccSpriteDown.setZOrder(1); ccSpriteDown.setAnchorPoint(cc.p(0, 0)); ccSpriteDown.setPosition(cc.p(hoseX, 0)); ccSpriteDown.setScaleY(downHeight / hoseHeight); var ccSpriteUp = cc.Sprite.createWithSpriteFrameName(HoseName[1]); ccSpriteUp.setZOrder(1); ccSpriteUp.setAnchorPoint(cc.p(0, 0)); ccSpriteUp.setPosition(cc.p(hoseX, downHeight + acrossHeight)); ccSpriteUp.setScaleY(upHeight / hoseHeight); this.hoseNode.addChild(ccSpriteDown); this.hoseNode.addChild(ccSpriteUp); this.hoseSpriteList.push(ccSpriteDown); this.hoseSpriteList.push(ccSpriteUp); return null;}MainLayer.prototype.groundRun = function (){ var action1 = cc.MoveTo.create(0.5, cc.p(-120, 0)); var action2 = cc.MoveTo.create(0, cc.p(0, 0)); var action = cc.Sequence.create(action1, action2); this.ground.runAction(cc.RepeatForever.create(action));}MainLayer.prototype.birdReadyAction = function (){ var birdX = this.bird.getPositionX(); var birdY = this.bird.getPositionY(); var time = birdY / 2000; var actionFrame = cc.Animate.create(cc.AnimationCache.getInstance().getAnimation('fly')); var flyAction = cc.Repeat.create(actionFrame, 90000); this.bird.runAction(cc.Sequence.create(flyAction) );}MainLayer.prototype.birdFallAction = function (){ this.gameMode = OVER; this.bird.stopAllActions(); this.ground.stopAllActions(); var birdX = this.bird.getPositionX(); var birdY = this.bird.getPositionY(); var time = birdY / 2000; this.bird.runAction(cc.Sequence.create(cc.DelayTime.create(0.1),cc.Spawn.create(cc.RotateTo.create(time, 90), cc.MoveTo.create(time, cc.p(birdX, 50)))) ); this.overNode.setVisible(true);}MainLayer.prototype.birdRiseAction = function (){ var riseHeight = 60; var birdX = this.bird.getPositionX(); var birdY = this.bird.getPositionY(); var time = birdY / 600; var actionFrame = cc.Animate.create(cc.AnimationCache.getInstance().getAnimation('fly')); var flyAction = cc.Repeat.create(actionFrame, 90000); var riseAction1 = cc.MoveTo.create(0.2, cc.p(birdX, birdY + riseHeight)); var riseAction2 = cc.RotateTo.create(0, -30); var riseAction = cc.Spawn.create(riseAction1, riseAction2); var fallAction1 = cc.MoveTo.create(time, cc.p(birdX, 50)); var fallAction2 = cc.Sequence.create(cc.DelayTime.create(time / 6), cc.RotateTo.create(0, 30)); var fallAction = cc.Spawn.create(fallAction1, fallAction2); this.bird.stopAllActions(); this.bird.runAction(cc.Spawn.create(cc.Sequence.create(riseAction, cc.DelayTime.create(0.1), fallAction),flyAction) );}MainLayer.prototype.onUpdate = function (dt){ if (this.gameMode != START) {return; } this.passTime += dt; this.hoseNode.setPositionX(800 - 200 * this.passTime); this.bird.setPositionX(-500 + 200 * this.passTime); this.checkCollision();}MainLayer.prototype.checkCollision = function (){ if (this.bird.getPositionY() < 60) {cc.log('floor');this.birdFallAction();return; } for (var i = 0; i < this.hoseSpriteList.length; i++) {var hose = this.hoseSpriteList[i];if (!this.isInScreen(hose)) { // continue;}if (cc.rectIntersectsRect(hose.getBoundingBox(), this.bird.getBoundingBox())) { cc.log('hose positionX==' + hose.getBoundingBox().x); cc.log('this.bird positionX==' + this.bird.getBoundingBox().x); cc.log('i==' + i); cc.log('birdFallAction'); this.birdFallAction(); return;} }}MainLayer.prototype.isInScreen = function (sprite){ return (sprite.getPositionX() > 0 && sprite.getPositionX() < 720);}MainLayer.prototype.onExitClicked = function (){}MainLayer.prototype.onStartClicked = function (){ cc.Director.getInstance().resume(); cc.BuilderReader.runScene('', 'MainLayer');}MainLayer.prototype.onExit = function (){ cc.log('onExit');}MainLayer.prototype.onTouchesBegan = function (touches, event){ var loc = touches[0].getLocation();}MainLayer.prototype.onTouchesMoved = function (touches, event){}MainLayer.prototype.onTouchesEnded = function (touches, event){ if (this.gameMode == OVER) {return; } if (this.gameMode == READY) {this.gameMode = START;this.readyNode.setVisible(false); } var loc = touches[0].getLocation(); this.birdRiseAction();}function isInRect(ccRect, ccTouchBeganPos){ if (ccTouchBeganPos.x > ccRect.x && ccTouchBeganPos.x < (ccRect.x + ccRect.width)) {if (ccTouchBeganPos.y > ccRect.y && ccTouchBeganPos.y < (ccRect.y + ccRect.height)) { return true;} } return false;}function getRandom(maxSize){ return Math.floor(Math.random() * maxSize) % maxSize;}

再次提示代碼下載地址:

百度云盤(pán):http://pan.baidu.com/s/1pJnWDb9

flappy博文系列:

flappy bird游戲源代碼揭秘和下載后續(xù)---移植到android真機(jī)上

flappy bird游戲源代碼揭秘和下載后續(xù)---移植到html5網(wǎng)頁(yè)瀏覽器

flappy bird游戲源代碼揭秘和下載后續(xù)---日進(jìn)5萬(wàn)美元的秘訣AdMob廣告 (將寫(xiě))

flappy bird游戲源代碼揭秘和下載后續(xù)---移植到蘋(píng)果ios上 (未寫(xiě))

注:本文轉(zhuǎn)自CSDN。

標(biāo)簽: IOS
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲一区二区手机在线观看| 美女国产精品久久久| 老司机免费视频一区二区| 久久麻豆视频| 色网在线免费观看| 天堂av在线一区| 日韩精品社区| 国产精品va视频| 成人羞羞视频在线看网址| 亚洲国产福利| 国产亚洲一级| 国产日产精品_国产精品毛片 | 久久国产精品亚洲77777| 亚洲精品视频一二三区| 国产精一区二区| 日韩毛片在线| 中文字幕视频精品一区二区三区| 国产一级成人av| 国产一区一一区高清不卡| 精品捆绑调教一区二区三区| 久久国产高清| 福利在线一区| 久久夜色精品| 国产一区二区三区网| 91九色精品| 欧美久久香蕉| 久久亚洲国产| 国产日韩欧美在线播放不卡| 日韩免费在线| 日韩国产在线观看| 99久精品视频在线观看视频| 日韩国产欧美在线播放| 色婷婷亚洲mv天堂mv在影片| 国产韩日影视精品| 亚洲毛片在线| 亚洲天堂1区| 欧美一区免费| 国内激情久久| 老司机精品视频网| 免费在线视频一区| 高清不卡亚洲| 国产乱码精品一区二区亚洲| 99在线观看免费视频精品观看| 久久精品超碰| 亚洲免费影院| 神马午夜在线视频| 欧美午夜网站| 国产精品毛片一区二区三区| 久久精品福利| 国产亚洲一区在线| 亚洲天堂av影院| 国产欧美69| 久久亚洲风情| 香蕉成人av| 国产精品久久久一区二区| 伊人久久成人| 色综合www| 精品亚洲成人| 国产欧美在线| 偷拍亚洲精品| 亚洲一区二区三区高清| 中文字幕在线官网| 牛牛精品成人免费视频| 日韩精品中文字幕一区二区| 久久影院一区| 日韩久久电影| 91免费精品| 欧美极品中文字幕| 日韩精品久久久久久| 亚洲综合三区| 亚洲欧美日韩国产综合精品二区| 播放一区二区| 日韩欧美中文| 日韩av自拍| 成人在线免费观看91| 久久成人av| 欧美黄色精品| 蜜桃久久久久| 精品资源在线| 日本在线成人| 亚洲免费毛片| 亚洲精品免费观看| 亚洲网址在线观看| 免费在线观看视频一区| 性色av一区二区怡红| 欧美日韩三区| 黄色日韩在线| 亚洲欧美网站| 美女被久久久| 亚洲精品高潮| 亚洲精品在线二区| 日韩欧美激情电影| 欧美自拍一区| 国产精品亚洲欧美日韩一区在线 | 亚洲色诱最新| 在线亚洲激情| 视频一区二区中文字幕| 综合日韩在线| 国产欧美日韩免费观看| 欧美伊人久久| 久久伊人国产| 欧美久久天堂| 欧美久久精品一级c片| 国产亚洲亚洲| 日本国产亚洲| 精品资源在线| 成人久久一区| 亚洲一区成人| 青草av.久久免费一区| 国产乱码精品一区二区三区亚洲人| 国产精品扒开腿做爽爽爽软件| 国产精品手机在线播放| 精品视频自拍| 成人免费电影网址| 免费在线观看一区二区三区| 青青草精品视频| 国产一区二区三区久久| 日韩av一级| 中文视频一区| 国产亚洲电影| 欧美片第1页| 美女精品在线| 国产三级一区| 99国产精品免费视频观看| 中文不卡在线| 激情久久一区二区| 国产一区二区高清| 国产精品成人自拍| 久久国产影院| 日韩av不卡一区二区| 午夜影院一区| 亚洲综合小说| 国产一区二区三区国产精品| 欧美日韩日本国产亚洲在线 | 免费人成精品欧美精品| 国产免费久久| 蜜桃国内精品久久久久软件9| 日本一不卡视频| 韩国精品主播一区二区在线观看 | 久久亚洲资源中文字| 亚洲va在线| 欧美日韩视频免费看| 亚洲性色av| 亚洲精品乱码| 亚洲最新无码中文字幕久久| 日韩一区精品| 91精品国产乱码久久久久久久 | 狠狠久久伊人| 蜜桃一区二区三区在线观看| 免费在线欧美黄色| 久久国产精品99国产| 国产精品久久久久蜜臀| 免费久久99精品国产| 美女久久久久久 | 精品国产午夜肉伦伦影院| 在线综合视频| 国产va在线视频| 日韩在线观看中文字幕| 久久久一本精品| 国产精品一区二区三区www| 亚洲激情中文在线| 成人国产精品| 国产乱人伦丫前精品视频| 好吊日精品视频| 久草精品视频| 日本少妇精品亚洲第一区| 一级欧洲+日本+国产| 国产成人久久精品一区二区三区| 亚洲无线观看| 91超碰国产精品| 日韩中文欧美| 久久影院资源站| 国产欧美一区| 日韩欧美另类中文字幕| 亚洲综合二区| 激情欧美日韩一区| 欧美激情另类| 精品日韩一区| 麻豆精品在线观看| 免费看欧美美女黄的网站| 丝袜av一区| 日韩精品中文字幕第1页| 欧美国产另类| 欧美激情福利| 国产精品视频一区二区三区综合| 亚洲精品一二三**| 免费精品视频在线| 亚洲免费成人| 日韩一级精品| 合欧美一区二区三区| 99久久亚洲精品蜜臀| 午夜欧美巨大性欧美巨大| 精品国产欧美日韩| 欧美成人精品一级| 国产精品久久久亚洲一区| 国产三级精品三级在线观看国产| 日本aⅴ精品一区二区三区| 亚洲精品日本| 日韩精品亚洲aⅴ在线影院| 亚洲精品国模|