`

另一种实现 Fruit Ninja 里刀

阅读更多
实现原理:

  画直线

    在一个 list 列表里记录所有的触摸点,在 draw 函数里开始画线,线段逐渐加粗,在末端逐渐减细。可以直接用 Cocos2d 里的 box2d 模板,添加了少量代码即可。

//使用list列表保存所有点
std::list<CGPoint> pointl;
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
   
    UITouch *touch = [touches anyObject];
   
    CGPoint start = [touch locationInView: [touch view]];   
    start = [[CCDirector sharedDirector] convertToGL: start];
   
    CGPoint end = [touch previousLocationInView:[touch view]];
    end = [[CCDirector sharedDirector] convertToGL:end];
   
    float distance = ccpDistance(start, end);
    if (distance > 1)
    {
        int d = (int)distance;
        for (int i = 0; i < d; i++ )
        {
            float difx = end.x - start.x;
            float dify = end.y - start.y;
            float delta = (float)i / distance;
            CGPoint p;
            p.x = start.x + (difx * delta);
            p.y = start.y + (dify * delta);
           
            pointl.push_back(p);
        }
    }
   
    pointcount = pointl.size();

}

//*************************************
draw函数核心代码

-(void) draw
{
    CGPoint pr;
    glPointSize( 0.3f );
    list <CGPoint>::iterator b = pointl.begin();
    glColor4ub(255,255,255,32);
   
    for(;b!=pointl.end();b++)
    {
        CGPoint pt = *b;
        ps++;
        //控制线段的粗细,使达到两头细中间粗的效果
        if (ps > (pl -30 )) // initlw > 5 )
        {
           initlw=initlw-lwc;
        }
        else
        {
          if (initlw < 6 )
          {
            initlw =initlw+lwc;
          }
        }
        glLineWidth( initlw);
        if (pr.x > 1 && pr.y > 1 )
        {
            //画线段,也可以使用点
            ccDrawLine(pr, pt );
          
        }
        pr = *b;
    }
}

//**********************************************
//自动缩短线段

-(void) tick: (ccTime) dt
{
    //It is recommended that a fixed time step is used with Box2D for stability
    //of the simulation, however, we are using a variable time step here.
    //You need to make an informed choice, the following URL is useful
    //http://gafferongames.com/game-physics/fix-your-timestep/
   
    int32 velocityIterations = 8;
    int32 positionIterations = 1;
   
    // Instruct the world to perform a single step of simulation. It is
    // generally best to keep the time step and iterations fixed.
    world->Step(dt, velocityIterations, positionIterations);
   
    //*********************************************
    //**
    for (int i=0; i<12 ; i++)
    {
        if (pointl.size() >0)
        {
           pointl.pop_front();
           pointcount--;
        }
        else {
            break;
        }
    }

    //为了使线段不过长
    while (pointcount >200) {
        pointl.pop_front();
        //pointcount--;
        pointcount=pointl.size();
    }
    //********************************************
}
分享到:
评论

相关推荐

    Fruit Ninja水果忍者VR.apk(oculus quest 游戏)

    Fruit Ninja水果忍者VR.apk(oculus quest 游戏) 这个就不用多介绍了吧,喜欢玩的自然就喜欢,在VR的世界里挥动双刀切水果。 送给正在研究安卓开发的朋友们做参考。

    山东第三届acm大赛Fruit Ninja

    山东第三届acm大赛Fruit Ninja 内有详细注释。好运

    scratch Fruit Ninja 游戏

    scratch Fruit Ninja 游戏,用scratch图形化平台编辑。

    fruit-ninja-master

    标题中的"fruit-ninja-master"指的是一个开源项目,它可能是《水果忍者》游戏的源代码仓库。《水果忍者》是一款在全球范围内广受欢迎的休闲切水果游戏,由Halfbrick Studios开发。通过分析这个项目的源码,我们可以...

    Fruit Ninja.rp

    Fruit Ninja.rp

    水果忍者-Fruit Ninja.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码

    水果忍者-Fruit Ninja.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码水果忍者-Fruit Ninja.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码水果忍者-Fruit Ninja.zipscratch2.0 3.0编程...

    fruit-ninja-master_ninja_fruit_planthw6_

    1. 游戏对象(Game Objects):在“fruit ninja master”中,游戏的对象可能包括水果、刀、炸弹等。这些对象有自己的属性(如位置、速度、类型)和行为(如移动、生成、消失)。源代码中,每个对象可能会被设计成一...

    国外的fruit ninja 水果忍者 项目

    “水果忍者”(Fruit Ninja)是一款在全球范围内广受欢迎的休闲游戏,以其独特的切割水果的游戏玩法和精美的视觉效果吸引了无数玩家。在这个项目中,我们关注的是由Unity引擎开发的国外版本。Unity是一款强大的跨...

    fruit ninja代码仿水果忍者代码

    在"水果忍者"的实现中,我们可以创建一个主场景,负责管理游戏的整体流程,如游戏开始、暂停、结束等状态。同时,还可以创建单独的层来处理切水果、得分计算和用户界面显示等具体功能。 2. **物体和动作**:在Cocos...

    fruit_ninja

    水果忍者 风靡iphone android版

    fn.zip_action _action script_fruit ninja_pene78

    "fn.zip_action _action script_fruit ninja_pene78"这个标题暗示了我们正在探讨的是一个基于AS3实现的《水果忍者》游戏项目,由开发者pene78创建。下面我们将深入解析这个项目中涉及的主要知识点。 首先,让我们来...

    Simple Fruit Ninja Game using JavaScript with Free Source.zip

    这个项目“Simple Fruit Ninja Game using JavaScript”提供了一个免费的源代码,让我们有机会深入了解如何利用JavaScript来创建一个类似《水果忍者》的小游戏。这个游戏的核心玩法是切水果,玩家通过在屏幕上滑动...

    Fruit-ninja:网页版水果忍者

    "Fruit-ninja:网页版水果忍者"正是这样一个项目,它将游戏移植到了网页环境中,让玩家无需下载应用,只需打开网页即可开始切水果的乐趣。 在项目描述中提到,这个网页版的水果忍者是用作消遣娱乐的,适合在空闲时间...

    水果忍者 Fruit Ninja for Windows Phone 7

    Windows Phone 7上的水果忍者。 XAP包。部署到手机上即可使用。

    ninja.zip_ 构建工具_64位_ninja_win10

    Ninja是一款高效的命令行构建工具,特别适用于C++项目,它由Google开发并开源。这款工具的设计目标是快速、简洁和跨平台,旨在提高开发者的工作效率。在“ninja.zip_构建工具_64位_ninja_win10”这个压缩包中,包含...

    Fruit Ninja Puss in Boots HD v1.0.4

    这个是远古版本哦开心(*^o^)人(^o^*)

    ninja.exe文件

    2. **构建文件格式**:ninja使用一种简洁的文本文件格式,名为`build.ninja`,其中定义了目标、依赖关系和构建规则。这种格式旨在使构建文件更易于理解和编辑,同时也适合由其他工具自动生成。 3. **依赖性管理**:...

    ninja加速编译应用程序

    Ninja是一款轻量级且速度极快的构建系统,旨在优化编译时间,尤其适合大型项目。它最初由Google开发,现已成为许多开源项目和持续集成系统的首选构建工具。 标题中的“ninja加速编译应用程序”指的是利用Ninja来...

    ninja-win-1.10.2.zip

    标题 "ninja-win-1.10.2.zip" 暗示了这是一个针对Windows平台的ninja构建工具的版本1.10.2的压缩包。ninja是一款高效的自动化构建系统,它专注于速度和简洁性,常用于C++和其他语言的项目构建,尤其是在与Google的...

    PyPI 官网下载 | ninja-1.10.2.3.tar.gz

    4. **cloud native**:这是对“云原生”的另一种表达,强调ninja可能遵循云原生原则,即设计时考虑了云环境的特性,如可移植性、自动化和敏捷性。 5. **Python库**:ninja作为一个Python库,意味着它可以被其他...

Global site tag (gtag.js) - Google Analytics