How to implement water ripples?

后端 未结 3 1659
挽巷
挽巷 2020-12-13 03:00

I\'m working on an iphone game. In that i had to produce water ripples. I dont know how to get that. I heard thatit can be done with openGL. I am very new to this concept. C

3条回答
  •  無奈伤痛
    2020-12-13 03:51

    I found the source code of the water ripple effect so following code to implement into your project and solove your problem also.

    import "HelloWorldLayer.h"

    // HelloWorldLayer implementation
    @implementation HelloWorldLayer
    
    +(CCScene *) scene
    {
        // 'scene' is an autorelease object.
        CCScene *scene = [CCScene node];
        
        // 'layer' is an autorelease object.
        HelloWorldLayer *layer = [HelloWorldLayer node];
        
        // add layer as a child to scene
        [scene addChild: layer];
        
        // return the scene
        return scene;
    }
    
    // on "init" you need to initialize your instance
    -(id) init
    {
        
        if( (self=[super init])) {
    
            rippleImage = [ pgeRippleSprite ripplespriteWithFile:@"image_old.png" ];
            [ self addChild:rippleImage ];
            CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello Cocos2D Forum" fontName:@"Marker Felt" fontSize:16];
            label.position = ccp( 80 , 300 );
            [self addChild: label];
            [ [ CCTouchDispatcher sharedDispatcher ] addTargetedDelegate:self priority:0 swallowsTouches:YES ]; 
            
            // schedule update
            [ self schedule:@selector( update: ) ];    
                    
        }
        return self;
    }
    
    float runtime = 0;
    
    -( BOOL )ccTouchBegan:( UITouch* )touch withEvent:( UIEvent* )event {
        runtime = 0.1f;
        [ self ccTouchMoved:touch withEvent:event ];
        return( YES );
    }
    
    -( void )ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
        CGPoint pos;
        
        if ( runtime >= 0.1f ) {
            
            runtime -= 0.1f;
            
            // get touch position and convert to screen coordinates
            pos = [ touch locationInView: [ touch view ] ];
            pos = [ [ CCDirector sharedDirector ] convertToGL:pos ];
        
            // [ rippleImage addRipple:pos type:RIPPLE_TYPE_RUBBER strength:1.0f ];    
            [ rippleImage addRipple:pos type:RIPPLE_TYPE_WATER strength:2.0f ];  
            
            
        }
    }
    
    -( void )update:( ccTime )dt {
        
        runtime += dt;
        
        [ rippleImage update:dt ];
    }
    
    // on "dealloc" you need to release all your retained objects
    - (void) dealloc
    {
        // in case you have something to dealloc, do it in this method
        // in this particular example nothing needs to be released.
        // cocos2d will automatically release all the children (Label)
        
        // don't forget to call "super dealloc"
        [super dealloc];
    }
    @end
    

    Also you can download the source code from the Git

提交回复
热议问题