当前位置: 移动技术网 > IT编程>移动开发>IOS > ios FlowCover效果demo

ios FlowCover效果demo

2019年05月12日  | 移动技术网IT编程  | 我要评论

3D《肉蒲团》,4377小游戏,男子用喇叭骂母亲

demo功能:flowcover 效果,正反无限循环滚动,每个cover都有单独的倒影

demo说明:项目中flowcover classes文件夹是存放核心类。


demo接图:

 

 


demo主要代码:绘制部分


[csharp] 
- (void)drawtile:(int)index atoffset:(double)off 

    flowcoverrecord *fcr = [self gettileatindex:index]; 
    glfloat m[16]; 
    memset(m,0,sizeof(m)); 
    m[10] = 1; 
    m[15] = 1; 
    m[0] = 1; 
    m[5] = 1; 
    double trans = off * spreadimage; 
     
    double f = off * flankspread; 
    if (f < -flankspread) { 
        f = -flankspread; 
    } else if (f > flankspread) { 
        f = flankspread; 
    } 
    m[3] = -f; 
    m[0] = 1-fabs(f); 
    double sc = 0.45 * (1 - fabs(f)); 
    trans += f * 1; 
     
    glpushmatrix(); 
    glbindtexture(gl_texture_2d,fcr.texture); 
    gltranslatef(trans, 0, 0); 
    glscalef(sc,sc,1.0); 
    glmultmatrixf(m); 
    gldrawarrays(gl_triangle_strip,0,4); 
     
    // reflect  
    gltranslatef(0,-2,0); 
    glscalef(1,-1,1); 
    glcolor4f(0.5,0.5,0.5,0.5); 
    gldrawarrays(gl_triangle_strip,0,4); 
    glcolor4f(1,1,1,1); 
     
    glpopmatrix(); 

 
- (void)draw 

    /*
     *  get the current ect ratio and initialize the viewport
     */ 
     
    double aspect = ((double)backingwidth)/backingheight; 
     
    glviewport(0,0,backingwidth,backingheight); 
    gldisable(gl_depth_test);               // using painters algorithm  
     
    glclearcolor(0,0,0,0); 
    glvertexpointer(3,gl_float,0,gvertices); 
    glenableclientstate(gl_vertex_array); 
    gltexcoordpointer(2, gl_short, 0, gtextures); 
    glenableclientstate(gl_texture_coord_array); 
     
    glenable(gl_texture_2d); 
    glblendfunc(gl_src_alpha,gl_one_minus_src_alpha); 
    glenable(gl_blend); 
     
    /*
     *  setup for clear
     */ 
     
    [eaglcontext setcurrentcontext:context]; 
     
    glbindframebufferoes(gl_framebuffer_oes, viewframebuffer); 
    glclear(gl_color_buffer_bit); 
     
    /*
     *  set up the basic coordinate system
     */ 
     
    glmatrixmode(gl_projection); 
    glloadidentity(); 
    glscalef(1,aspect,1); 
    glmatrixmode(gl_modelview); 
    glloadidentity(); 
     
    //modify by chenwh 2010-01-06 for round view begin  
    /*
     *  change from alesandro tagliati <alessandro.tagliati@gmail.com>:
     *  we don't need to draw all the tiles, just the visible ones. we guess
     *  there are 6 tiles visible; that can be adjusted by altering the 
     *  constant
     */ 
    /*
    int i,len = [self numtiles];
    int mid = (int)floor(offset + 0.5);
    int istartpos = mid - vistiles;
    if (istartpos<0) {
        istartpos=0;
    }
    for (i = istartpos; i < mid; ++i) {
        [self drawtile:i atoffset:i-offset];
    }
    
    int iendpos=mid + vistiles;
    if (iendpos >= len) {
        iendpos = len-1;
    }
    for (i = iendpos; i >= mid; --i) {
        [self drawtile:i atoffset:i-offset];
    }
    */ 
     
    int len = [self numtiles]; 
    int istartpos = -vistiles; 
    int iendpos = vistiles; 
    int mid = 0; 
     
    int pagecount = (int)offset; 
    double moveoffset; 
    if (offset < 0) { 
        moveoffset = offset - ceil(offset); 
    } else { 
        moveoffset = offset - floor(offset); 
    } 
     
    int index, position; 
    //nslog(@"offset=%.2f, pagecount=%d, moveoffset=%.2f", offset, pagecount, moveoffset);  
    for (position = istartpos; position < mid; ++position) { 
        index = (len + position + pagecount) % len; 
        if (index < 0) { 
            index = len + index; 
        } 
        //nslog(@"index=%d, position=%d", index, position);  
        [self drawtile:index atoffset:position - moveoffset]; 
    } 
    for (position = iendpos; position >= mid; --position) { 
        index = (position + pagecount) % len; 
        if (index < 0) { 
            index = len + index; 
        } 
        //nslog(@"index=%d, position=%d", index, position);  
        [self drawtile:index atoffset:position - moveoffset]; 
    } 
    //modify by chenwh 2010-01-06 for round view end  
     
    glbindrenderbufferoes(gl_renderbuffer_oes, viewrenderbuffer); 
    [context presentrenderbuffer:gl_renderbuffer_oes]; 

- (void)drawtile:(int)index atoffset:(double)off
{
 flowcoverrecord *fcr = [self gettileatindex:index];
 glfloat m[16];
 memset(m,0,sizeof(m));
 m[10] = 1;
 m[15] = 1;
 m[0] = 1;
 m[5] = 1;
 double trans = off * spreadimage;
 
 double f = off * flankspread;
 if (f < -flankspread) {
  f = -flankspread;
 } else if (f > flankspread) {
  f = flankspread;
 }
 m[3] = -f;
 m[0] = 1-fabs(f);
 double sc = 0.45 * (1 - fabs(f));
 trans += f * 1;
 
 glpushmatrix();
 glbindtexture(gl_texture_2d,fcr.texture);
 gltranslatef(trans, 0, 0);
 glscalef(sc,sc,1.0);
 glmultmatrixf(m);
 gldrawarrays(gl_triangle_strip,0,4);
 
 // reflect
 gltranslatef(0,-2,0);
 glscalef(1,-1,1);
 glcolor4f(0.5,0.5,0.5,0.5);
 gldrawarrays(gl_triangle_strip,0,4);
 glcolor4f(1,1,1,1);
 
 glpopmatrix();
}

- (void)draw
{
 /*
  * get the current aspect ratio and initialize the viewport
  */
 
 double aspect = ((double)backingwidth)/backingheight;
 
 glviewport(0,0,backingwidth,backingheight);
 gldisable(gl_depth_test);    // using painters algorithm
 
 glclearcolor(0,0,0,0);
 glvertexpointer(3,gl_float,0,gvertices);
 glenableclientstate(gl_vertex_array);
 gltexcoordpointer(2, gl_short, 0, gtextures);
 glenableclientstate(gl_texture_coord_array);
 
 glenable(gl_texture_2d);
 glblendfunc(gl_src_alpha,gl_one_minus_src_alpha);
 glenable(gl_blend);
 
 /*
  * setup for clear
  */
 
 [eaglcontext setcurrentcontext:context];
 
    glbindframebufferoes(gl_framebuffer_oes, viewframebuffer);
    glclear(gl_color_buffer_bit);
 
 /*
  * set up the basic coordinate system
  */
 
 glmatrixmode(gl_projection);
 glloadidentity();
 glscalef(1,aspect,1);
    glmatrixmode(gl_modelview);
 glloadidentity();
 
 //modify by chenwh 2010-01-06 for round view begin
 /*
  * change from alesandro tagliati <alessandro.tagliati@gmail.com>:
  * we don't need to draw all the tiles, just the visible ones. we guess
  * there are 6 tiles visible; that can be adjusted by altering the
  * constant
  */
 /*
 int i,len = [self numtiles];
 int mid = (int)floor(offset + 0.5);
 int istartpos = mid - vistiles;
 if (istartpos<0) {
  istartpos=0;
 }
 for (i = istartpos; i < mid; ++i) {
  [self drawtile:i atoffset:i-offset];
 }
 
 int iendpos=mid + vistiles;
 if (iendpos >= len) {
  iendpos = len-1;
 }
 for (i = iendpos; i >= mid; --i) {
  [self drawtile:i atoffset:i-offset];
 }
 */
 
 int len = [self numtiles];
 int istartpos = -vistiles;
 int iendpos = vistiles;
 int mid = 0;
 
 int pagecount = (int)offset;
 double moveoffset;
 if (offset < 0) {
  moveoffset = offset - ceil(offset);
 } else {
  moveoffset = offset - floor(offset);
 }
 
 int index, position;
 //nslog(@"offset=%.2f, pagecount=%d, moveoffset=%.2f", offset, pagecount, moveoffset);
 for (position = istartpos; position < mid; ++position) {
  index = (len + position + pagecount) % len;
  if (index < 0) {
   index = len + index;
  }
  //nslog(@"index=%d, position=%d", index, position);
  [self drawtile:index atoffset:position - moveoffset];
 }
 for (position = iendpos; position >= mid; --position) {
  index = (position + pagecount) % len;
  if (index < 0) {
   index = len + index;
  }
  //nslog(@"index=%d, position=%d", index, position);
  [self drawtile:index atoffset:position - moveoffset];
 }
 //modify by chenwh 2010-01-06 for round view end
 
 glbindrenderbufferoes(gl_renderbuffer_oes, viewrenderbuffer);
 [context presentrenderbuffer:gl_renderbuffer_oes];
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网