Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - aroldo

#16
Enrico,

I noticed that too. I will have to debug it to understand which one pixel is not moving.
Other than that it is a nice little particle system.

Regarding he android test thank you for doing that. :nw: I will send you the BrickBuster compile for android.

Can I send it to your e-mail?
What kind of Android devices you have?
BrickBuster should work on screen sizer from 320x480 to 1536x2048.
#17
Spicypixel,

Nice job! I do have a framework to re-size for all kind of screen size formats and devices.
When I have some time I will create a version to Share in this forum.
#18
GLBasic Team,

It is the time to contribute and give something back to this developer community. (GLBasic Rocks!) :nw:

First of all I have to say that I am not the best programmer as many in this forum, I have been working with GLB for over 2 years and I keep learning.

A while ago I needed a particle system to simulate an explosion in my game Brick Buster for iOS and WebOS devices.
It should work well on Android but I don't have the devices to test therefore I did not launch it in the Goggle Play market.
(Any volunteers to test it are welcome  :enc:)

There are two attachments, a picture of the test program and the entire GLB Project!!!

The Test Program

When you run the test program you will see the fireworks and a menu with 5 choices.
Just hover the mouse over the option you want and click to increase or change the value of the particle system.
The test program allows you to control the particle system variables as follows:
Particles - this controls the number of particles in the system, from 64 to 1024.
Life - The duration of each particle, from 0.5 to 10.5.
Mode - Explode the particles or Implode the particles.
Dot Size - Is the size of each particle. from 1 to 5
The test program simulates fireworks on the screen and you can turn on and turn off the sound.
Sound -Turns the sound on and off
Bonus
I also included in the test program the following functions:
Mouse control
Text formatting and mouse hover, both will automatically adjust to any screen size.

Using the Particle System
In your program you first call the allocParticle() to instanciate the particle system.
Then you call drawparticles() to draw then in the particle array object.
Last you call moveparticles() from your update function.
The particle Type object has the following variables:
Code (glbasic) Select
TYPE  Tparticle
x=0   
y=0
sine=0
cosine=0
speed=0
life#=0.0
colors=0 //points to array of colors
ENDTYPE

This particle system has 2 features: Explode and Implode.

Gernot can you pin this post to the Code Snippets? :good:

Play with it and I hope you enjoy :D
#19
Thank you all for your help.

Can someone post how the "prefix file" and Xcode project settings should be?
#20
GLBasic - en / iOS 7 Beta
2013-Jun-12
Hello GLB Community,


Today I had a chance to test the iOS 7 Beta on the iPhone 4S.
So far all my GLBBasic apps ran without any problem.

As far as the iOS 7 Beta there are some small bugs, but overall it it a nice OS.
The new iOS 7 SDK has ne APIs and will allow pier -pier WiFi communications, that's what the new Air Drop uses

One thing I notice is that the new multitasking features reminds me of the WebOS because it is similar, you can flip throught the applications and then remove then like the cards in WebOS.
More info here:
http://www.apple.com/ios/ios7/
#21
DaCarSoft,

Muchas gracias.
Entiendo lo que tu dices.
Voy a encontrar la solución, tendrá que pasar cierto tiempo de investigación. De esta manera voy a aprender más acerca de XCode.

Saludos
#22
This example from the GLB Help file does not work.

When I compile it gives the following error:
Code (glbasic) Select
compiling:
C:\Users\ACARVA~1\AppData\Local\Temp\glbasic\gpc_temp0.cpp: In function `int __GLBASIC__::__MainGameSub_()':
C:\Users\ACARVA~1\AppData\Local\Temp\glbasic\gpc_temp0.cpp:65: error: invalid initialization of non-const reference of type '__GLBASIC__::DGNatArray&' from a temporary of type 'int'
C:/Program Files (x86)/GLBasic_v11/Compiler/platform/Include/glb.h:1370: error: in passing argument 1 of `DGNat __GLBASIC__::MEM2SPRITE(__GLBASIC__::DGNatArray&, DGNat, DGNat, DGNat)'
*** FATAL ERROR - Please post this output in the forum


Does any body know what is wrong?

Code (glbasic) Select
LOCAL w%, h%, pix%[]
IF LOADSPRITEMEM("test.png", w%, h%, pix%[])
   MEM2SPRITE(0, w%, h%, pix%[])
   DRAWSPRITE 0,0,0
ENDIF
SHOWSCREEN
MOUSEWAIT

#23
 SFguy

I had these issues my self dealing with different scale my solution works fine resizing sprites but it uses more memory. Depending on how many sprites you have to import you may have to scale the images outside GLB and have an app for each resolution.


  • I start by making all the images/sprites for retina display resolution (1536 x 2048)
  • Get  the screen size

Code (glbasic) Select
GETSCREENSIZE screenW, screenH

  • Calculate the image index coordinates

Code (glbasic) Select
FUNCTION getimgIDX:
GLOBAL Widx = 1536/screenW
GLOBAL Hidx = 2048/screenH

IF Widx < Hidx THEN Widx = Hidx

ENDFUNCTION


  • Load the images. (Here is were some devices with less memory have a problem, for instance iPod / iPhone 3rd Generation)
    Code (glbasic) Select
    FUNCTION loadImages:
    LOADSPRITE "Media/images/paddle.png",0 // paddle
    LOADSPRITE "Media/images/ball.png",1 // ball
    ENDFUNCTION

    [/i]Now Resize the images

Code (glbasic) Select
FUNCTION resizeIMG:
// Resize the Brick, Paddle and Ball
GETSPRITESIZE 0, PADDLEW, PADDLEH // Paddle
GETSPRITESIZE 1, BALLW, BALLH // Ball

PADDLEW= INTEGER (PADDLEW/Widx) // resize Width
PADDLEH= INTEGER (PADDLEH/Hidx) //resize Height
BALLW= INTEGER (BALLW/Widx) // resize Width
BALLH= BALLW // resize // this is for round shapes to keep the aspect ratio!
ENDFUNCTION


[/i]Now in your draw function use the SPRITE RESIZE[/li][/list]
Code (glbasic) Select
STRETCHSPRITE 0,paddle_x,paddle_y,PADDLEW, PADDLEH


It would be nice if GLB had a command that allowed resizing the sprites to be resized at load time, this way it would save memory
For instance something like this:
Code (glbasic) Select
LOADSPRITE bmp$, num%, width%, height%
#24
DaCarSoft,

Ok movido el archivo. Mm a la carpeta de clases en XCode y ahora tengo diferentes errores.

ver las capturas de pantalla!
#25
MrTAToad and marovada,

Thank you.

I moved the .mm file to the Class folder in the XCode project and now I have different errors in the .mm file that I have to fix.

See attachments.

#26
marovada,

Thanks again, I agree with your comment , the references should be in the libPROGRAM.a, the GLBasic compeller/Linker should be doing that.
Something is missing in the gbas file.

I will keep researching the forum and the Xcode tutorials.

What do you mean by: Can you step out what you're doing?

If I understood correctly, I am trying to open the iOS native keyboard, and receive key strokes in the GBL program.

My goal is to learn how to pass and receive data from iOS into GLB and then implement iAds
#27
Yes I did.

Like I said the error I reported is from GLBasic and I tried in V10.xxx and V11.xxx same result.

If I ignore the GLBasic error and execute my code in Xcode Liinker complains about undefined symbols as you can see below.

Code (glbasic) Select
Undefined symbols for architecture armv7:
  "_iOSMessageBox", referenced from:
      __GLBASIC__::__MainGameSub_() in libPROGRAM.a(gpc_temp0.o)
  "_GetiOSMessageBoxValues", referenced from:
      __GLBASIC__::__MainGameSub_() in libPROGRAM.a(gpc_temp0.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

#28
Yes I it is in the XCode project directory, but the compilation error is happening in GLB!
#29
DaCarSoft
Gracias por su respuesta. Tengo tanto GLB V10.xxx y GLB 11.xxx
El problema de compilación " Build-Multiplatform"  está ocurriendo tanto en V10 y V11.
Si el archivo. mm está dentro de la carpeta correcta, pero como he dicho el error ocurre en GLBasic y no en XCode.

Creo que falta algo en la configuración del proyecto GBL.

Si yo ejecuto mi código en Xcode el linker se queja de símbolos no definidos.

Code (glbasic) Select
Undefined symbols for architecture armv7:
  "_iOSMessageBox", referenced from:
      __GLBASIC__::__MainGameSub_() in libPROGRAM.a(gpc_temp0.o)
  "_GetiOSMessageBoxValues", referenced from:
      __GLBASIC__::__MainGameSub_() in libPROGRAM.a(gpc_temp0.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)


#30
I am trying some code from DaCarSoft from the spanish forum http://www.glbasic.com/forum/index.php?topic=6463.msg79425#msg79425


I Created a GLB project and included iOSKeyBoadTest.gbas and the iOSKeyBoadTest.mm

when I compile I get the following errors from the linker:

Code: GLBasic [Select]
linking:
gpc_temp0.o:gpc_temp0.cpp:(.text+0x1f6): undefined reference to `_iOSMessageBox'
gpc_temp0.o:gpc_temp0.cpp:(.text+0x59a): undefined reference to `_GetiOSMessageBoxValues'
gpc_temp0.o:gpc_temp0.cpp:(.text+0x6ed): undefined reference to `_iOSMessageBox'
gpc_temp0.o:gpc_temp0.cpp:(.text+0x8ef): undefined reference to `_GetiOSMessageBoxValues'
*** FATAL ERROR - Please post this output in the forum

The  iOSKeyBoadTest.gbas includes this code:

Code (glbasic) Select

IMPORT "C" void iOSMessageBox(const char*,const char*, const char*, const char*)
IMPORT "C" const char* GetiOSMessageBoxValues()

GLOBAL MENSAJE$

// El nuevo símbolo de separación para los parámetros a pasar a la función es la "tubería", antes era $, en mi código anterior...
iOSMessageBox("Título","Mensaje" + CHR$(0xD) + CHR$(0xD) + CHR$(0xD) + CHR$(0xD), "Esto es una prueba  ü Ñ |:P", "Aceptar|Cancelar")

LOCAL InstanteComienzo% = GETTIMERALL()

MENSAJE$ = ""
WHILE MENSAJE$ = ""
        SLEEP 500
        WHILE ABS(GETTIMERALL() - InstanteComienzo%) < 500
                HIBERNATE
        WEND

        MENSAJE$ = GetiOSMessageBoxValues()
WEND

PRINT MENSAJE$, 100, 100

SHOWSCREEN
HIBERNATE
MOUSEWAIT



iOSMessageBox("Título","Mensaje" + CHR$(0xD) + CHR$(0xD), "Esto es otra prueba", "Aceptar|Cancelar")

InstanteComienzo% = GETTIMERALL()

MENSAJE$ = ""
WHILE MENSAJE$ = ""
        SLEEP 500
        WHILE ABS(GETTIMERALL() - InstanteComienzo%) < 500
                HIBERNATE
        WEND

        MENSAJE$ = GetiOSMessageBoxValues()
WEND

PRINT MENSAJE$, 100, 100

SHOWSCREEN
HIBERNATE
MOUSEWAIT



and the iOSKeyBoadTest.mm this:


Code (glbasic) Select
#if defined (TARGET_OS_IPHONE)



// UIALERT

//#import <UIKit/UIAlert.h>    // No es necesario duplicar la importación hecha con anterioridad

@interface GLBasicMessageBoxer: NSObject <UIAlertViewDelegate>
{
    // Declaración de los punteros para los elementos comunes
    UITextField* txtObject;
    NSMutableArray* resObjects;
    NSString* resValues;
    NSString* pTitle,* pMessage,* pLabels,* pButtons;
}
@end

@implementation GLBasicMessageBoxer

// Llamada necesaria para llamar al código que muestra el Alert en el proceso principal
- (void)showAlertCaller:(NSString*)cTitle andMessage:(NSString*)cMessage andLabels:(NSString*)cLabels andButtons:(NSString*)cButtons
{
    // Introducción de los valores pasados como parámetro punteros accesibles por "showAlert"
    pTitle = [[NSString alloc] initWithString:cTitle];
    pMessage = [[NSString alloc] initWithString:cMessage];
    pLabels = [[NSString alloc] initWithString:cLabels];
    pButtons = [[NSString alloc] initWithString:cButtons];
    // Llamada a "showAlert" enviándola al proceso principal
    [self performSelectorOnMainThread:@selector(showAlert) withObject:nil waitUntilDone:NO];
}
   
- (void)showAlert
{
        // Creación de la vista para el Alert
    UIAlertView* alert = [[UIAlertView alloc] init];
        alert.title = pTitle;
        alert.message = pMessage;
        alert.delegate = self;
    // Anulación de la asignación de la función de cancelar al botón con índice 0
    alert.cancelButtonIndex = -1;
        // Creación de la matriz de botones introduciendo valores según los parámetros pasados separados por "|"
        NSArray* aButtons = [pButtons componentsSeparatedByString:@"|"];
    // Creación de cada botón a partir de cada valor de la matriz
        for (NSString* iObject in aButtons){
                [alert addButtonWithTitle:iObject];
        }
        // Creación de la matriz de controles de texto introduciendo valores según los parámetros pasados separados por "|"
        if (pLabels != @"") {
                double iPos = 70.0;
                NSArray* aLabels = [pLabels componentsSeparatedByString:@"|"];
        resObjects = [[NSMutableArray alloc] init];
        // Creación de cada control de texto con las propiedades adecuadas asegurando que no devuelve un valor "(null)" mediante .text = @""
                for (NSString* iObject in aLabels){
                        txtObject = [[UITextField alloc] init];
                        txtObject.frame = CGRectMake(12.0, iPos, 260.0, 25.0);
            txtObject.text = @"";
                        txtObject.placeholder = iObject;
                        txtObject.backgroundColor = [UIColor whiteColor];
                        txtObject.clearButtonMode = UITextFieldViewModeWhileEditing;
                        txtObject.keyboardType = UIKeyboardTypeAlphabet;
                        txtObject.keyboardAppearance = UIKeyboardAppearanceAlert;
                        txtObject.autocapitalizationType = UITextAutocapitalizationTypeNone;
                        txtObject.autocorrectionType = UITextAutocorrectionTypeNo;
                        txtObject.borderStyle = UITextBorderStyleLine;
            // Colocación del foco si es el primer control creado para introducción de texto
                        if ([aLabels indexOfObject:iObject] == 0) {
                                [txtObject becomeFirstResponder];
                // El teclado aparece automáticamente al colocar el foco en un control de texto
                        }
            // Aumentar el valor de la variable que controla la coordenada de posición del "top" de cada control de texto
                        iPos = iPos + 30.0;
                        // Asociación de cada control a la matriz mutable
            [resObjects addObject:txtObject];
            // XCode soporta añadir controles de texto directamente a un Alert pero Apple no permite su uso directo al no estar documentado
            // Para poder imitar el comportamiento pueden agregarse "subvistas" al Alert e introducir los controles necesarios en ellas
                        [alert addSubview:txtObject];
            [txtObject release];
            txtObject = nil;
                       
                }
               
        }
       
        [alert show];
        [alert release];
}

// Recogida del botón pulsado en la memoria mediante la propiedad "delegate" (= self) asignada en "showAlert"
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
        resValues = [[NSString alloc] initWithFormat:@"%d", buttonIndex];
}

// Código que obtiene y trata los valores para construir el resultado mediante valores separados por "|"
- (void)getValues
{
    // Agregado a la cadena del botón pulsado de los valores de cada control de texto en el Alert
    for (UITextField* iObject in resObjects){
        // Insertar el texto recogido del control en un NSMutableString
        NSMutableString* tmpObjectValue = [[NSMutableString alloc] initWithString:iObject.text];
        // Reemplazar el caracter usado en el código como separador de valores si el usuario lo ha introducido en los controles
        [tmpObjectValue replaceOccurrencesOfString:@"|" withString:@"!" options:0 range:NSMakeRange(0, [tmpObjectValue length])];
        // Agregar el valor obtenido al contenido anterior de la memoria
        resValues = [resValues stringByAppendingFormat:@"|%@", tmpObjectValue];
        // Liberar la memoria
        [tmpObjectValue release];
        tmpObjectValue = nil;
    }
    // Creación de otro puntero "NSData" temporal para albergar los valores obtenidos transformados para evitar errores por "encodings"
    NSData* tmpValuesEncoded = [[NSData alloc] init];
    // Conversión de la cadena obtenida a un "encoding" Windows Latin obviando los caracteres no reconocidos mediante "allowLossyConversion"
    tmpValuesEncoded = [resValues dataUsingEncoding:NSWindowsCP1252StringEncoding allowLossyConversion:YES];
    // Reintroducción de la cadena final convertida al "encoding" adecuado para que pueda devolverse desde "getValuesCaller"
    resValues = [[NSString alloc] initWithData:tmpValuesEncoded encoding:NSWindowsCP1252StringEncoding];
    // Liberar la memoria
    tmpValuesEncoded = nil;
}

// Obtención de los valores del botón pulsado y texto introducido en los controles recuperando los valores desde el proceso principal
- (const char*)getValuesCaller
{
    // Comprobación de si se ha pulsado un botón del Alert
    if (resValues != nil){
        // Llamada a "getValues" en el proceso principal
        [self performSelectorOnMainThread:@selector(getValues) withObject:nil waitUntilDone:YES];
        // Devolvemos el valor de la cadena preparada desde "getValues"
        return [resValues cStringUsingEncoding:NSWindowsCP1252StringEncoding];
        // Liberar la memoria
        [resObjects release];
        resObjects = nil;
        [resValues release];
        resValues = nil;
        [pTitle release];
        pTitle = nil;
        [pMessage release];
        pMessage = nil;
        [pLabels release];
        pLabels = nil;
        [pButtons release];
        pButtons = nil;
        [self release];
        [super dealloc];
    }
    else
    {
        // Si no se ha pulsado ningún botón se devuelve una cadena vacía
        return "";
    }
}

@end

// Creación del puntero para las funciones contenidas en "GLBasicMessageBoxer" a usar cada vez que se requiera un Alert
GLBasicMessageBoxer* newAlert;



// Creación de función "externalizada" a usar desde GLBasic (los parámetros "labels" y "buttons" pueden contener varios valores separados con "$")
extern "C" void iOSMessageBox(const char* cTitle, const char* cMessage, const char* cLabels, const char* cButtons)
{
        newAlert = [[GLBasicMessageBoxer alloc] init];
    // Conversión de tipos "C" a "NSString" al recuperar los parámetros enviados desde GLBasic y lanzado del Alert
        [newAlert showAlertCaller:[NSString stringWithCString:cTitle encoding:NSASCIIStringEncoding] andMessage:[NSString stringWithCString:cMessage encoding:NSASCIIStringEncoding] andLabels:[NSString stringWithCString:cLabels encoding:NSASCIIStringEncoding] andButtons:[NSString stringWithCString:cButtons encoding:NSASCIIStringEncoding]];
}

// Creación de la función "externalizada" a usar desde GLBasic (los parámetros devueltos son valores separados con "$")
extern "C" const char* GetiOSMessageBoxValues()
{
    // Se recuperan en primer lugar el índice de botón pulsado y a continuación los textos introducidos en los controles generados
        return [newAlert getValuesCaller];
}

// FIN UIALERT



#endif