Anuncios Google

LUA ¿se puede rotar una imagen?

Hola tengo una imagen en pantalla y quiero rotarla, por ejemplo en el sentido de las horas. Para que os hagais una idea es un coche que va recorriendo la pantalla y quier que tuerza. ¿Conoceis alguna funcion de LUA que rote una imagen?

 

Gracias


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de _Dark_Cloud_

Os recomiendo...

Os recomiendo pasaros al LPHMv2 que trae una funcion para hacer eso mucho mas sencillo simplemente introduciendo la variable de la imagen y el angulo de giro.

Salu2



¡Visca el Barça y Viva España!

ufff, le he echado un ojo y

ufff, le he echado un ojo y esto es cada vez mas complicado. entre LUA, LPHM8, PGE, LPHMv2... tengo los conocimientos informaticos necesarios `pero para mi es mas dificil decidirme por uno u otro que ponerme a programar en si, ademas parece que no son muy parecidos unos de otros...Frown

Imagen de _Dark_Cloud_

No te creas

Tampoco cambian mucho de LPHM8 a LPHMv2 (éste último es mas facil a mi parecer) pero si estas acostumbrado a LPHM7 e inferiores es mirar un poco las novedades y los cambios de sintaxis na mas ;)

Salu2



¡Visca el Barça y Viva España!

Imagen de pipagerardo

Rotar imágenes

-- Usando el LuaplayerHM hay que usar las funciones en 3D GU, no lo hé explicado antes puesto que es un poco complejo. Si bien es cierto que usando en nuevo Luaplayer PGE es mucho más fácil. Esta información está sacada de la libreria:

-- GX - Graphics Express
--      Simple sprite rendering library for PSP
--      Version 0.1
--    Andrew Carpenter
--    http://www.studiokagato.com

 

function startGX()
    Gu.start3d()
    Gu.clearDepth(0);
    Gu.clear(Gu.COLOR_BUFFER_BIT+Gu.DEPTH_BUFFER_BIT)
    Gum.matrixMode(Gu.PROJECTION)
    Gum.loadIdentity()
    Gum.perspective(75, 480/272, 0.5, 1000)
    Gum.matrixMode(Gu.VIEW)
    Gum.loadIdentity()
end
 
function endGX()
    Gu.end3d()
end
 
function createSprite(img,color,x,y,width,height)
    if color==nil then color = Color.new(255,255,255) end
    if x==nil then
        x = 0; u0 = 0
    else
        if x >= img:width() then
            x = img:width()
            u0 = 1
        else  
            u0 = x/img:width()
        end
    end
    if y==nil then
        y = 0; v0 = 0
    else
        if y >= img:height() then
            y = img:height()
            v0 = 1
        else
            v0 = y/img:height()
        end
    end
    if width==nil then
        width = img:width()
        u1 = 1;
    else
        if width > img:width() then
            width = img:width()
        end
        if (x+width) >= img:width() then
            u1 = 1
        else
            u1 = (x+width)/img:width()
        end
    end
    if height==nil then  
        height = img:height()
        v1 = 1;
    else
        if height > img:height() then
            height = img:height()
        end
        if (y+height) >= img:height() then
            v1 = 1
        else
            v1 = (y+height)/img:height()
        end
    end
    w = width/2
    h = height/2
    sprite = {
        image = img,  
        vertices = {
            {u0, v1, color, -w, -h,  0},
            {u0, v0, color, -w,  h,  0},
            {u1, v0, color,  w,  h,  0},
        
            {u0, v1, color, -w, -h,  0},
            {u1, v0, color,  w,  h,  0},
            {u1, v1, color,  w, -h,  0}
        }
    }
    return sprite
end
 
function drawSprite(sprite,x,y,angle)
    if x==nil then x=0 end
    if y==nil then y=0 end
    if angle==nil then angle=0 end
    white = Color.new(255,255,255)
    Gu.enable(Gu.BLEND)
    Gu.blendFunc(Gu.ADD, Gu.SRC_ALPHA, Gu.ONE_MINUS_SRC_ALPHA, 0, 0)
    Gu.enable(Gu.TEXTURE_2D);
    Gu.texImage(sprite.image)
    Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
    Gu.texEnvColor(white)
    Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
    Gu.texScale(1, 1)
    Gu.texOffset(0, 0)
    Gu.ambientColor(white)
    Gum.matrixMode(Gu.MODEL)
    Gum.loadIdentity()
    Gum.translate(x, y, -176);
    Gum.rotateXYZ(0, 0, -angle)
    Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, sprite.vertices)    
end

 

black = Color.new(0, 0, 0)
image = Image.load("gx.png");
sprite = createSprite(image)
x = 0; y = 0;
angle = 0
 
while true do
    screen:clear(black)
    startGX()
    
    drawSprite(sprite,x,y,angle)
 
    endGX();
    
    ctrl = Controls.read()
    
    if ctrl:left() then
        x = x - 1;
        if x < -200 then x = -200 end
    elseif ctrl:right() then
        x = x + 1;
        if x > 200 then x = 200 end
    end
    if ctrl:down() then
        y = y - 1;
        if y < -100 then y = -100 end
    elseif ctrl:up() then
        y = y + 1;
        if y > 100 then y = 100 end
    end
    
    stick = ctrl:analogX()
    -- ignore dead zone
    if stick > -35 and stick < 35 then stick = 0 end
    stick = stick/2000;
    angle = angle + stick
    
    if ctrl:start() then
        screen:clear()
        break
    end
 
    screen.waitVblankStart()
    screen.flip()
end

Muchas gracias a los 2. El

Muchas gracias a los 2. El script que usaba yo de 3D GU era parecido al que ha puesto Pipagerardo, solo cambiaba en un par de lines (lo sufuciente como para que el resultado no se pàreciese en nada Embarassed). En cuanto a lo del Phoenix la verdad es que es bastante interesante, muchas de las cosas mas comunes se simplifican bastante y lleva funcionalidades nuevas... Habra que tenerlo muy en cuenta...

 Gracias a ambos, sigo con el tajo a ver si cuando tenga algo visible lo cuelgo...Wink

Hola amigo, te recomiendo

Hola amigo, te recomiendo que uses el motor phoenix game engine lua, es genial, puedes dibujar por pantalla cualquier imagen y rotarlo lo que quieras en radianes, la funcion es esta:

pge.texture.draweasy(texture, x, y, [rotation], [alpha])
  

donde texture es tu imagen, x e y la posicion en pantalla, rotation es el angulo que la quieres girar en radianes (1.57 es mas o menos 90 grados, 3.14 es mas o menos 180... etc), si no pones rotacion por defecto es 0, y alpha es la trasparencia de la imagen, 255 es opaco y 0 es transparente totalmente, si no pones nada por defecto son 255, aver si te sirve, yo antes usaba el lua player hm pero abia cosas que no podia hacer, me pase al phoenix y estoy super contento con lo que me permite hacer.

Espero que sirva.

Imagen de pucelano

Aqui tienes unos cuantos

Aqui tienes unos cuantos scripts, entre ellos uno para rotar una imagen: Enlace

 

Saludos

Gracias a todos,

Gracias a todos, efecivamente si tengo las imagenes hacia arriba y hacia abajo los movimientos serian muy bruscos. La intencion es que el coche se mueva la pantalla girando libremente.

Pucelano le he echado un ojo a los script pero el de rotar imagen solo permite en 90º, 180º y 270º. Estoy metido con las librerias GU 3D pero armo cada pifostio de guiness que no veais, y en los manuales de Pipagerardo tampoco aparece nada. Bueno si alguien encuentra algo no dudeis en dejarlopor aca...

Gracias a todos

Imagen de _Dark_Cloud_

Yo no se

Pero si nadie sabe puedes usar 2 imagenes diferentes que de un coche no pesaran mucho ;)

Salu2

Imagen de rubenelportero

estoy contigo

aunque en vez de dos imagenes puede hacer una plantilla donde este el coche mirando hacia arriba derecha izquierda y abajo

Imagen de CkFra

Ya claro

pero los giros serían muy bruscos, y lo que quieres es que vaya rotando poco a poco la imagen para que el giro sea real.

Busca el tutorial de pipagerardo y si hay no viene, no habrá en ningún otro sitio xD

Saludos 

Imagen de rubenelportero

hombre...

en una plantilla, puedes hacer el coche poco a poco valla girando para eso son las plantillas ¿no? para hacer "mini animaciones" de giro y demas

Imagen de CkFra

Pero

para que una imagen vaya girando poco a poco en una plantilla tiene que tener 200 sprites, y para cargar eso... es mejor buscar una solución de rotación, si la hay. 

Efectivamente como dice

Efectivamente como dice CkFra tendriamos que tener una plantilla con 360 sprites que son los posibles angulos en una rotacion, porque con 20 o 30 el salto al girar quedaria feo . Anoche me quede hasta las miles viendo lo de las GU 3d pero es una odisea. Tiene que haber algo mas sencillo... Sigo con la busqueda...

 

Imagen de rubenelportero

pero...

como minimo necesitas una plantilla de 4 imagenes, poque cuando vayya hacia delante el coche supongo que solo se vera el culo del cohe, cuando va hacia la detecha se vera de lado, cuando mira hacia abajo se vera el capo y cuando se va hacia la izquierda tres cuartos de lo mismo,

 

salu2

PD. suerte con la busqueda,

PD2. ¿de que tamaño es el coche?, porquer creo que la solucion va a ser la plantilla pero alomejor alguien te soluciona la duda

PD3. con hacer una imgen cada 5º bastaria pero tu sigue buscando

creo que no me expliqué...

creo que no me expliqué antes, el juego es visto desde arriba. Para aprender LUA estoy pasando un tuto de un juego en FLASH. El juego es un circuito visto desde arriba y tu vas moviendo el coche con el stick. Tengo implementado todo el movimiento del coche, la aceleracion, la frenada, el giro... todo excepto que el morro del coche se gire hacia donde va. Pero eso es facilmente solucionable girando la imagen del coche un cierto angulo, angulo que tambien tengo ya calculado en cada pasada. Algo que es facilmente implementable en cualquier lenguaje como es girar una imagen un cierto grado en LUA se me esta haciendo cuesta arriba...

Os pongo el enlace de lo que llevo hecho asi lo veis:

http://www.javalinuevo.com/ficherossubidos/paco_car.rar

He visto tambien las librerias GD donde hay una funcion ROTATE(imagen,angulo), pero no se como usarlas desde LUA pues estan en C.

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.