quiero - iphone caracteristicas
¿Cómo implementar las ondas de agua? (3)
Estoy trabajando en un juego de iPhone. En eso tuve que producir ondas de agua. No sé cómo conseguir eso. Escuché que se puede hacer con OpenGL. Soy muy nuevo en este concepto. ¿Puede alguien guiarme?
Aquí hay algunos recursos que encontré:
Idioma Agnóstico 2d Algoritmo de ondulación del agua
texto alternativo http://freespace.virgin.net/hugo.elias/graphics/x_water4.gif alt text http://freespace.virgin.net/hugo.elias/graphics/ripples.gif
Proyecto OpenGL con ondas de agua (Fuente)
texto alternativo http://www.sulaco.co.za/opengl/water.jpg
También puede optar por las preguntas frecuentes de GameDev . Desplácese hacia abajo a la sección "Renderización de agua".
jk:
z=sin(x)+cos(y)
Más en serio, ¿el Quartz Composer no hace ondas para ti como una de las capas de efectos? ¿O fue anunciado solo para el iPhone 3.0 SDK?
Encontré el código fuente del efecto de ondulación del agua, así que sigo el código para implementar en tu proyecto y también para tu problema.
importar "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