布卷攻略网 - 分享游戏攻略和教程技巧!

当前位置:布卷攻略网 > 程序介绍 > 水果忍者pc中文版怎么重置?

水果忍者pc中文版怎么重置?

2025-05-10 21:00:03

布卷攻略网将重点带大家了解水果忍者pc版,希望可以帮到你。

水果忍者pc中文版怎么重置?

水果忍者pc中文版怎么重置?

那是因为在我的文档里面有游戏存档,找到Halfbrick/Fruit Ninjia 把里面的文件全部删掉就OK了

为什么在kinect设计空气鼠标的时候要进行坐标转换

最近Kinect连接Xbox玩水果忍者的视频非常红火,可惜小斤只有本本和Kinect,没法玩Xbox上的体感游戏。幸运的是,寻寻觅觅后,小斤发现水果忍者有PC版本,既然上一个教程我们已经可以让Kinect认出我们手势,在这基础上,我们用手来控制鼠标,就可以在PC上玩咯!

视频地址:,徒手切还需要多练练。

上个教程,我们通过RaiseHand来捕捉举起后手的位置,于是小斤决定,用RaiseHand来触发鼠标移动事件,用Click来触发鼠标单击,但测试结果不让人满意,鼠标移动一卡一卡的,原因是RaiseHand识别需要时间,达不到实时的标准,怎么办呢?小斤翻阅了OpenNI的文档,找到了tracking的相关API。这样,在我们识别出手后,使用跟踪的办法得到手的实时位置,移动鼠标的问题迎刃而解!这就好比在茫茫人海中,跟着一个人走比找到一个人更容易!

因为这个教程代码量稍微多了点,小斤就不一股脑全抛上来了,先上主函数,再解释回调函数。

【1】程序执行后,窗体和显示和上一个手势识别的例程是一样的,由于要使用mouse_event来控制鼠标,小斤选择了MFC框架,主要是一个Dialog和一个按钮。由于我们的程序执行时,是使用OpenCV的highgui进行图像显示的,这里点击窗体上按钮后创建并开始线程,线程函数KinectGestureMain(),也就是这里的主函数。

【2】KinectGestureMain()中的内容,大部分和上一个例程是一样的,在【2】这里,小斤创建了一个HandsGenerator,这个生成器主要帮我们负责跟踪的工作。它的创建方法和其它的生成器是一样的,传一个Context给Create()方法

【3】与GestureGenerator类似,我们需要为HandsGenerator注册回调函数,

[cpp] view plain copy

XnStatusxn::HandsGenerator::RegisterHandCallbacks ( HandCreate  CreateCB,  HandUpdate UpdateCB,  HandDestroy  DestroyCB, void *  pCookie,  XnCallbackHandle &  hCallback )

其中定义HandCreate是一个新的手(跟踪)被创建时调用的,HandDestroy 则相反,在手消失后被调用,UpdateCB在手变化位置时被调用。另外,pCookie是传给回调函数的指针,可以放一些用户数据,小斤把程序的画板图像指针传入,这样可在回调函数中直接绘图了。phCallback是一个回调函数的handle,可用来注销回调函数。

【4】这边设定了,按m键,进入鼠标控制模式。

其它代码都和上一个例程,我们来看看回调函数。

[cpp] view plain copy

// callback function for gesture recognized  

  

void XN_CALLBACK_TYPEGRecognized( xn::GestureGenerator &generator,  

                              const XnChar *strGesture,  

                              const XnPoint3D *pIDPosition,  

                              const XnPoint3D *pEndPosition,  

                              void *pCookie )  

{  

    int imgStartX=0;  

    int imgStartY=0;  

    int imgEndX=0;  

    int imgEndY=0;  

  

    //【5】  

    imgStartX=(int)(640/2-(pIDPosition->X));  

    imgStartY=(int)(480/2-(pIDPosition->Y));  

    imgEndX=(int)(640/2-(pEndPosition->X));  

    imgEndY=(int)(480/2-(pEndPosition->Y));  

  

    IplImage* refimage=(IplImage*)pCookie;  

    if(strcmp(strGesture,"Wave")==0)  

    {  

       cvLine(refimage,cvPoint(imgStartX,imgStartY),cvPoint(imgEndX,imgEndY),CV_RGB(255,255,0),6);  

       //【6】  

       handsGenerator.StartTracking(*pEndPosition);  

    }  

    else if(strcmp(strGesture,"Click")==0)  

    {  

       cvCircle(refimage,cvPoint(imgStartX,imgStartY),6,CV_RGB(0,0,255),12);  

       //【7】  

       if(isRealMouseControl)  

       {  

           messageHandler(cvPoint(imgStartX,imgStartY),0,REAL_MOUSE_CLICK);  

       }  

    }  

}  

  

// callback function forgesture progress  

void XN_CALLBACK_TYPEGProgress( xn::GestureGenerator &generator,  

                            const XnChar *strGesture,  

                            const XnPoint3D *pPosition,  

                            XnFloat fProgress,  

                            void *pCookie )  

  

{  

}

【5】由于pIDPosition和pEndPosition的坐标,是以屏幕中心为(0,0)点的坐标系,在OpenCV中的显示,是以屏幕左上角为(0,0)点,所以这里做了一个转换。

【6】这一段代码,我们的GestureGenerator识别出“挥动”手势后,调用了HandsGenerator的StartTracking()方法来开始在pEndPosition这个位置跟踪手,pEndPosition便是“挥动”“手势的结束位置。

【7】中,如果识别出了“前推”手势,并开启了鼠标控制模式,就调用小斤定义的messageHandler()方法模拟鼠标点击。这个messageHandler()待会会在AppMessage.cpp中实现。

接着,小斤实现了Hands相关的回调函数:

[cpp] view plain copy

//【8】  

  

void XN_CALLBACK_TYPEHand_Create(xn::HandsGenerator& generator,XnUserID nId,const XnPoint3D*pPosition, XnFloatfTime, void*pCookie)  

{  

    addTrackingId(nId);  

}  

  

   

  

void XN_CALLBACK_TYPEHand_Update(xn::HandsGenerator& generator,XnUserID nId,const XnPoint3D*pPosition, XnFloatfTime, void*pCookie)  

{  

    int imgPosX=0;  

    int imgPosY=0;  

    char locationinfo[100];  

    imgPosX=(int)(640/2-(pPosition->X));  

    imgPosY=(int)(480/2-(pPosition->Y));  

    IplImage* refimage=(IplImage*)pCookie;  

    cvSetImageROI(refimage,cvRect(40,450,640,30));  

    CvFont font;  

    cvInitFont( &font,CV_FONT_VECTOR0,1, 1, 0, 3, 5);  

    cvSet(refimage,cvScalar(255,255,255));  

  

    if(isRealMouseControl)  

    {  

       sprintf(locationinfo,"MouseCtrl: %dth HandLoc: %d,%d",nId,(int)pPosition->X,(int)pPosition->Y);  

    }  

    else  

    {  

       sprintf(locationinfo,"Normal: %dth HandLoc: %d,%d",nId,(int)pPosition->X,(int)pPosition->Y);  

    }  

    cvPutText(refimage,locationinfo ,cvPoint(30,30), &font, CV_RGB(0,0,0));  

    cvResetImageROI(refimage);  

    CvPoint thisLocation=cvPoint(imgPosX,imgPosY);  

    //【9】  

    if(isRealMouseControl)  

    {  

       //cvCircle(refimage,cvPoint(imgPosX,imgPosY),1,CV_RGB(255,0,0),2);  

       messageHandler(thisLocation,nId,REAL_MOUSE_MOVE);  

    }  

    else  

    {  

       cvCircle(refimage,cvPoint(imgPosX,imgPosY),1,CV_RGB(255,0,0),2);  

    }  

}  

  

void XN_CALLBACK_TYPEHand_Destroy(xn::HandsGenerator& generator,XnUserID nId,XnFloat fTime,void* pCookie)  

{  

    //printf("Lost Hand: %dn", nId);  

    removeTrackingId(nId);  

}

【8】中的Hand_Create()就是CreateCB,该回调函数定义如下:

[cpp] view plain copy

void XN_CALLBACK_TYPEHand_Create(xn::HandsGenerator& generator,XnUserID nId,const XnPoint3D*pPosition, XnFloatfTime, void*pCookie)

其中,generator指定触发Hands的生成器。

nId为被创建的手(跟踪)的id,这个id会随着手的不断创建和消失增加,用以标识每一个手。

pPosition是手当前的位置,fTime是一个Timestamp,而pCookie就是用户传入的数据指针了。

在该方法中,小斤使用了自己定义的addTracking()方法,该方法也在AppMessage.cpp中实现。小斤在该文件中维护了一个数组,用以标识每个id的手是否在跟踪状态。

【9】Hand_Update()和Hand_Destroy()的参数和Hand_Create()是一样的,除去一堆绘图过程之外,小斤使用messageHandler()方法模拟鼠标移动。

以下是AppMessage.cpp的内容:

[cpp] view plain copy

#include "AppMessage.h"  

  

//Location and move anglelast time for each userId(Hand Id)  

CvPoint lastLocation[MAX_HAND_NUM];  

  

int isHandTracking[MAX_HAND_NUM]={0};  

int isClickDown=0;  

  

void addTrackingId(int userId)  

{  

    isHandTracking[userId]=1;  

}  

  

void removeTrackingId(int userId)  

{  

    isHandTracking[userId]=0;  

}  

  

CvPoint getLastLocation(int userId)  

{  

    return lastLocation[userId];  

}  

  

  

void messageHandler(CvPoint &location,int userId,int flag)  

{  

    //initialize the lastLocation from the location obtained bythe first time  

    if(lastLocation[userId].x==0&&lastLocation[userId].y==0)  

    {  

       lastLocation[userId].x=location.x;  

       lastLocation[userId].y=location.y;  

    }  

       if(flag==REAL_MOUSE_CLICK)  

       {  

           if(!isClickDown)  

           {  

              mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);  

           }  

           else {  

              mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);       

           }  

           isClickDown=1-isClickDown;  

       }  

       else if(flag==REAL_MOUSE_MOVE)  

       {  

       //【10】  

           int firstHandId=-1;  

           for(int i=0;i<MAX_HAND_NUM;i++)  

           {  

              if(isHandTracking[i]!=0)  

              {  

                  if(firstHandId==-1)  

                  {  

                     firstHandId=i;  

                     break;  

                  }  

              }  

           }  

           if(abs(location.x-lastLocation[userId].x)<5)  

           {  

              location.x=lastLocation[userId].x;  

           }  

           if(abs(location.y-lastLocation[userId].y)<5)  

           {  

              location.y=lastLocation[userId].y;  

           }  

           //【11】  

           if(userId==firstHandId)  

           {                     

              mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,  

                  (location.x-160)*65536/640*2,(location.y-120)*65536/480*2,0,0);     

           }       

       }  

       lastLocation[userId].x=location.x;  

       lastLocation[userId].y=location.y;  

}

【10】根据程序维护的isHandTracking数组,找到被跟踪的第一个手。

【11】考虑到可能有多个手被捕捉并跟踪的情况,先来先得,这里小斤让鼠标只听第一个出现的手的指挥,进行移动。

这里使用了MOUSEEVENTF_ABSOLUTE,所谓的绝对坐标,就是把计算机屏幕定义为65536*65536个点的坐标系。如果分辨率为640*480,想把鼠标移动到屏幕正中,就可以调用mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,320/640*65536,240/480*65536,0,0);

这段代码中,由于OpenNI输出的分辨率为640*480,而小斤习惯抬起右手来切水果,所以只使用了右半边区域来控制鼠标,同时做了些微调,大家可以根据自己的喜好来设置。

  另外,在水果忍者PC版中,切的动作是按住鼠标左键(MOUSE_LEFTDOWN)并移动(MOUSE_MOVE)来触发的。因此,小斤在程序中使用push手势来切换MOUSE_LEFTDOWN和MOUSE_LEFTUP。

  使用方法如下:打开程序,按下M键进入鼠标控制模式,进入游戏后,push一下,使鼠标处于MOUSE_LEFTDOWN状态,屏幕就会出现刀光剑影咯,不想玩的时候,再push一下即可。

好了,小斤要去切几盘水果休息一下咯,希望这篇文章对大家有所帮助和启发。

水果忍者的发售版本

在iPhone平台首先发行的游戏水果忍者(Fruit Ninja)Android版在2012年登录电子市场。Android版水果忍者内置有OpenFeint功能,支持与iOS平台用户实现跨平台排行榜、成就和社交功能。

休闲游戏《水果忍者》(Fruit Ninja)2010年底已可以从Windows Phone 7的Marketplace中下载并安装,其价格是2.99美元(可以免费试玩)。

《水果忍者》可应用于PC平台。通过触摸屏幕或者鼠标斩切水果,不支持触摸屏的电脑通过鼠标斩切水果。包含经典模式、禅模式和惊奇无限的街机模式。 游戏简介

水果忍者:“穿靴子的猫”全新的Bandito模式。通过一系列越来越令人兴奋的挑战,成为从未有过的最棒的水果忍者战士。每一关卡让玩家信服从没有过的冒险经历:来自巨人城堡的大量水果,精度和时序的挑战,面对新的障碍全力以赴,并且水果忍者历史上第一次推出了最被请求的添加“番茄”!

真正的Banditos必须利用最好的刀片因为得分是基于水果切片的数量,忍者reflexs和切片的效率制造了真正的战士,可以实现较高的分数,并上传自己的成绩到全球排行榜,和朋友和最优秀的玩家比较!

基本信息

距水果忍者登陆Apple Store18个月之后,开发商HalfBrick发布新一版本的Fruit Ninja:Puss in Boots,其中中文版水果忍者穿靴子的猫于2012年2月24日发布。

游戏方法

游戏中有两种不同的模式,一种是经过升级的经典模式,一种是闯关模式(Banditos)

新经典模式较之原版增加了番茄和特殊道具魔豆(magic bean),魔豆切中后如果三次游戏机会都还在就加25分;否则补回一次游戏机会

似乎初始的游戏的水果大幅降低了,但是后期非常难! 该版本是针对NVIDIA Tegra 2而推出了一款专属版本的水果忍者。跟普通版水果忍者没什么两样的,就是在画质上有质的飞跃,这可能跟性能强劲的Tegra 2 处理器有关吧!

《水果忍者中国版》新增要素:

新水果上市:

除了那些被我们切了不能再切的水果——西瓜、凤梨、猕猴桃、草莓、蓝莓、香蕉、苹果等等外,此次的’中国风’版还特意为朋友们增加了蜜桃这个富有中国特色的水果,另外游戏中还有一种火龙果可是代表着2012年的龙年哦。

全新的背景:

新’中国风’版也不会缺少新背景,玲珑可爱的十二生肖闪亮登场,绝对满足玩家的口味,让游戏中的背景焕然一新。 变态版中除水果数量之外都与原版相同,在变态版里,水果成堆出现,怒切的几率也增加了很多。特效也相当华丽,所以水平高的水果忍者玩家,几乎可以打到上万分呢!当然也是因为此原因,如果配置低的手机玩起来会有明显的卡顿感。

比较适合心情不好的时候发泄一下。

- 主要修改在香蕉模式,增加香蕉出现的概率,

三种香蕉同时登台再也不是梦想了.还适当增加了水果的数量,

也去掉了炸弹,就尽情发泄吧。

- 在经典模式和时间模式里面也都去掉了炸弹,在经典模式里面刀刀爆机很爽的.满屏闪。

-同时在变态版中大大增加了稀有水果——火龙果、猕猴桃的出现,光是稀有水果在街机模式里配合双倍香蕉的加分就可达一次五千分左右。

水果忍者HD版,即《水果忍者中文高清版》,提取自乐PAD,是绝对原生的官方中文版本,其画面质量丝毫不亚于早前发布的Tegra版本,切割时的细腻程度及丰富的色彩表现力,绝对带给玩家更加极致的高清视觉体验!这款游戏最独特的地方就是——增加了全新的双人模式,可以和恋人或朋友一起比拼刀法,看看到底谁更厉害!

《水果忍者中文高清版》的玩法与《水果忍者》普通版并无多大差异,依旧是刀法的较量。有经典模式、计时模式可选,经典模式中会随机出现炸弹,如果不小心碰到后果相当严重。计时模式中没有炸弹,强调的是手法与,忍者的刀法要切果于无形:)当然最好玩的还是双人模式,两人各执手机一端,激烈对抗,看谁最终切的更多。

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

上一篇:夜里十大禁用app排行?

下一篇:返回列表

相关推荐

本网站所有内容均由编辑从互联网收集整理,如果您发现不合适的内容,请联系我们进行处理,谢谢合作!

Copyright © 2021-2022 布卷攻略网 -(www.zjbbxmk.cn) 版权所有 网站备案号:粤ICP备2024275284号-1 网站地图