Introdução a Computação

Documentos relacionados
Introdução a Computação

Introdução a Computação

Introdução a Programação de Jogos

GraphicsLib Biblioteca Gráfica 2D. Documentação

Introdução a Programação de Jogos

PlayLib Educational Game Programming Library Documentação

Introdução a Programação de Jogos

Aprendendo a Programar em C com PlayLib

IUE INTRODUÇÃO A PROGRAMAÇÃO. Aula 12 Exemplos de Uso da Biblioteca Gráfica

Introdução à Engenharia ENG1000

Introdução a Programação de Jogos

Introdução à Engenharia ENG1000

Aprendendo a Programar em C com PlayLib

Introdução a Programação de Jogos

Introdução à Engenharia ENG1000

Processing Aula 2. Prof. Wallace Lages

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

Processamento Digital de Imagens

Trabalho GA - Editor de Cenário Isométrico

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Jogos Eletrônicos. Aula 06 Estruturas Condicionais e Interação. Edirlei Soares de Lima

Laboratório de Programação com Games. Conteúdo: Professor: - Conceitos de programação com Python. Instituto de Computação - UFF

Introdução à Programação C

Programação Gráfica Parte 3 Versão em Java 2006 PUCPR Tutoria de Jogos 1º Ano

Programação para Artistas com Processing. Profa. Rosilane Mota Prof. Wallace Lages

Programação 2012/2013 1º Semestre MEEC Laboratório 2 Semana de 22 de Outubro de 2012

Técnicas de Programação II

Introdução a Programação de Jogos

INTRODUÇÃO AO USO DO DEV C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Introdução ao HTML5 Canvas

LISTA DE ATIVIDADES Semestre Letivo 2018/1

Computação II MAB EPT/EP1. Interface Gráfica - Tkinter. Brunno Goldstein.

XNA. Introdução ao XNA

Programação Gráfica Parte 3 Versão em C 2006 PUCPR Tutoria de Jogos 1º Ano

Introdução a Computação

Jogos Eletrônicos. Aula 07 Estruturas de Repetição e Imagens. Edirlei Soares de Lima

Computação Gráfica - 04

Instituto Federal de São Paulo IFSP Prof.a Tânia M. Preto. Gráficos no Dev-C++ usando a bibliteca graphics.h. 1. Dicas de instalação:

Primeiro Projeto de PG: Lista de Temas Selecionados

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

DIRETORIA DE PESQUISA E PÓS-GRADUAÇÃO PROJETO: TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO NO PROCESSO DE ENSINO E APRENDIZAGEM DE MATEMÁTICA

Processamento Digital de Imagens

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ACTIONSCRIPT 3. Prof. Dr. Daniel Caetano

Pedro Vasconcelos DCC/FCUP. Programação Funcional 11 a Aula Gráficos usando Gloss

Orientação a Objetos - Programação em C++

Introdução a Programação de Jogos

INTRODUÇÃO AO JQUERY PROF. ME. HÉLIO ESPERIDIÃO

Desenho Computacional. Parte III

OmniPC 4.2 Guia do usuário

Usando o Tux Paint. Ícone TuxPaint. A tela principal é dividida em seções, cada uma com sua finalidade:

Ambiente de programação

Introdução à Programação

Exercício IV (2012/I)

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Estudo da Linguagem C# para realização de Dados Estatísticos

Algoritmos e Programação

Imagem e Gráficos. vetorial ou raster?

computador sala de aula responsável victor giraldo instituto de matemática ufrj Sérgio Carrazedo Dantas

Guia do Instrutor Jogo da Bruxa

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Puca Huachi Vaz Penna

Processing - Imagem 1. Processing. Imagem (PImage) Jorge Cardoso

Introdução à Programação

Método dos Elementos Finitos Aplicado à Engenharia de Estruturas Página 1

Estruturas de Repetição

Computação Gráfica - 06

Computação II Orientação a Objetos

ENG1000 Introdução à Engenharia

INF 1005 Programação I

ALGORITMOS, ARQUITETURA E ARDUINO

Linguagem C Princípios Básicos (parte 1)

Aula 2 Even e to t s d o M ouse

INFORMÁTICA APLICADA AULA 05 WINDOWS XP

Introdução à Engenharia ENG1000

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

Sub-rotinas David Déharbe

Manual do Visorama. Sergio Estevão and Luiz Velho. Technical Report TR Relatório Técnico. August Agosto

Programação de Computadores IV

Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br

Desenvolvimento de Atividades Educacionais usando o software Hot Potatoes. Utilizando a ferramenta JMix

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Computação Gráfica. Agostinho Brito. Departamento de Engenharia da Computação e Automação Universidade Federal do Rio Grande do Norte

1. Escreva um programa que imprima a ordem reversa de caracteres de uma string digitada pelo usuário. Ex: Entrada: Hello World. Saída:.

Introdução à Programação

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Open Day Bibliotecas ElipseX

Desenho auxiliado por computador

Kit controle remoto IR acionando 3 Led com Arduino

LUMISOFT (Guia do usuário)

Linguagem C: Introdução

Programas exemplo Gráficos no Dev-C++ usando a biblioteca BGI

Imagem ou Desenhos e Gráficos vetorial ou raster?

Arduino e Processing. Professor: Paulo Marcos Trentin Escola CDI Videira

Exercício 1. Abre o programa Scratch e executa as seguintes instruções: a) Clica na categoria de comandos Movimento

Transcrição:

Introdução a Computação Aula 11 Interface Gráfica Edirlei Soares de Lima <elima@inf.puc-rio.br>

Biblioteca Gráfica - PlayLib Conjunto de funções para criação e manipulação de formas geométricas, imagens, áudio, janelas... Baseada na API OpenGL. Pode ser usada para criação de jogos 2D, simulações, animações e outros aplicativos. Desenvolvida especialmente para esse curso!

Estrutura de um Programa #include "Graphics.h" using namespace PlayLib; Graphics graphics; int main(void) { graphics.createmainwindow(800, 600, "Teste"); graphics.startmainloop(); Inclusão da Biblioteca gráfica Indicação de que as funções da biblioteca gráfica serão usadas no contexto desse programa Instância de um objeto do tipo Graphics que permite o uso das funções gráficas. Cria uma janela de tamanho 800x600 com o título Teste Inicia o Loop principal do programa } return 0;

Resultado do Programa Anterior?

Loop Principal O Loop Principal consiste de uma função que é repetida enquanto o programa não for fechado pelo usuário. Todo processamento realizado pelo programa gráfico está de alguma forma ligado ao Loop Principal. No Loop Principal deve ser programado: Os objetos que serão desenhados na tela e como eles serão apresentados; Quais animações e movimentos os objetos terão. Toda a lógica do programa.

Definindo um Loop Principal void MainLoop() { graphics.setcolor(0,255,0); Função que será usada como Loop Principal do programa Define a cor que será utilizada para desenhar objetos na tela (Formato RGB) } graphics.fillrectangle2d(100, 100, 400, 200); Desenha um retângulo preenchido iniciando na posição (100,100) e indo até (200,400) int main(void) { graphics.createmainwindow(800, 600, Teste"); graphics.setmainloop(mainloop); Define que a função MainLoop será o Loop Principal do programa graphics.startmainloop(); } return 0;

Resultado do Programa Anterior?

Coordenadas de Tela Sistema de Coordenadas Cartesiano Duas dimensões (2D) Coordenas X e Y

y Coordenadas de Tela 600 100 (200,100) 0 200 800 x

Desenho de Primitivas Geométricas Ponto: void DrawPoint2D(int x, int y); Exemplo: graphics.drawpoint2d(200, 200); Desenha um ponto na posição (200, 200) da tela

Desenho de Primitivas Geométricas Linha: void DrawLine2D(int x1, int y1, int x2, int y2); Exemplo: graphics.drawline2d(100, 100, 200, 100); Desenha uma linha saindo da posição (100, 100) e indo até a posição (200, 100)

Desenho de Primitivas Geométricas Círculo: void DrawCircle2D(int x, int y, int radius); Exemplo: graphics.drawcircle2d(200, 200, 20); Desenha um círculo de raio 20 na posição (200, 200) da tela

Desenho de Primitivas Geométricas Círculo Preenchido: void FillCircle2D(int x, int y, int radius, int segments); Exemplo: graphics.fillcircle2d(200, 200, 20, 30); Desenha um círculo preenchido de raio 20 com 30 segmentos na posição (200, 200) da tela. Quantos mais segmentos, mais redondo o circulo será.

Desenho de Primitivas Geométricas Retângulo: void DrawRectangle2D(int x1, int y1, int x2, int y2); Exemplo: graphics.drawrectangle2d(100,100,200,200); Desenha um retângulo iniciando na posição (100, 100) e indo até a posição (200, 200)

Desenho de Primitivas Geométricas Retângulo Preenchido: void FillRectangle2D(int x1, int y1, int x2, int y2); Exemplo: graphics.fillrectangle2d(100,100,200,200); Desenha um retângulo preenchido iniciando na posição (100, 100) e indo até a posição (200, 200)

Desenho de Primitivas Geométricas Triângulo: void DrawTriangle2D(int x1, int y1, int x2, int y2, int x3, int y3); Exemplo: graphics.drawtriangle2d(100,100,200,100,150,200); Desenha um triângulo com o primeiro ponto na posição (100, 100), segundo ponto na posição (200, 100) e terceiro ponto na posição (150, 200)

Desenho de Primitivas Geométricas Triângulo Preenchido: void FillTriangle2D(int x1, int y1, int x2, int y2, int x3, int y3); Exemplo: graphics.filltriangle2d(100,100,200,100,150,200); Desenha um triângulo preenchido com o primeiro ponto na posição (100, 100), segundo ponto na posição (200, 100) e terceiro ponto na posição (150, 200)

Desenho de Primitivas Geométricas Modificando a Cor: void SetColor(float r, float g, float b); Exemplo: graphics.setcolor(255, 255, 0); Altera a cor que será usada para desenhar os objetos para o valor RGB (255,255,0). Ou seja, mistura o máximo de vermelho com o máximo de verde, o que resulta em amarelo.

Desenho de Primitivas Geométricas Formato de cor RGB: R = Red (Vermelho) G = Green (Verde) B = Blue (Azul) Escala RGB: 255 R G B Maior quantidade Não sabe o valor RGB da cor que você quer? http://www.colorpicker.com/ 0 Menor quantidade

Desenho de Primitivas Geométricas Modificando a Cor do Fundo da Tela: void SetBackgroundColor(float r, float g, float b); Exemplo: graphics.setbackgroundcolor(255, 255, 255); Altera a cor do fundo da tela para o valor RGB (255,255,255). Ou seja, mistura o máximo de todas as cores, o que resulta em branco.

Desenho de Primitivas Geométricas Modificando a Largura das Linhas: void SetLineWidth(float width); Exemplo: graphics.setlinewidth(12); Altera para 12 a largura das linhas usadas para desenhar as formas geométricas.

Desenho de Primitivas Geométricas Escrevendo um Texto na Tela: void DrawText2D(int x, int y, char* text); Exemplo: graphics.drawtext2d(100, 100, Hello World! ); Escreve Hello World! na posição (100, 100) da tela

Desenho de Primitivas Geométricas Escrevendo o valor de uma variável inteira na Tela: void DrawTextInt2D(int x, int y, int value); Exemplo: graphics.drawtextint2d(100, 100, MinhaVariavel); Escreve o valor atual armazenado na variável inteira MinhaVariavel na posição (100, 100) da tela

Desenho de Primitivas Geométricas Escrevendo o valor de uma variável float na Tela: void DrawTextFloat2D(int x, int y, float value); Exemplo: graphics.drawtextfloat2d(100, 100, Valor3); Escreve o valor atual armazenado na variável float Valor3 na posição (100, 100) da tela

Outras Funções Criar a Janela do Programa: void CreateMainWindow(int sizex, int sizey, char title[]); Exemplo: graphics.createmainwindow(800, 600, "Nome da Janela"); Cria a janela principal do programa com o tamanho 800x600 e com o título Nome da Janela

Outras Funções Executando o programa em tela cheia: void SetFullscreen(bool enable); Exemplo: graphics.setfullscreen(true); Coloca o programa em tela cheia graphics.setfullscreen(false); Remove o programa da tela cheia

Outras Funções Verificando a Velocidade de Execução do Programa: float GetFPS(); Exemplo: fps = graphics.getfps(); Coloca o número de frames por segundo na variável fps FPS (Frames per Second): Medida que nos indica quantos frames (imagens) consecutivos a placa de vídeo está conseguindo gerar por segundo.

Outras Funções Verificando a Velocidade de Execução do Programa: float GetElapsedTime(); Exemplo: PosicaoX = PosicaoX + (Speed * graphics.getelapsedtime()); Calcula o deslocamento em X de forma independente da taxa de frames por segundo. Isso é muito importante, pois permite que a velocidade do deslocamento seja independente da velocidade que o jogo está sendo executado.

Outras Funções Verificando a Largura e a Altura da Tela: int GetScreenWidth(); int GetScreenHeight(); Exemplo: width = graphics.getscreenwidth(); height = graphics.getscreenheight(); Coloca a largura da tela na variável width Coloca a altura da tela na variável height

Desenhando Imagens Para desenhar uma imagem na tela é necessário: (1) Criar uma variável do tipo Image. (2) Carregar a imagem do arquivo usando o comando LoadPNGImage. (3) Desenhar efetivamente a imagem na tela usando o comando DrawImage2D.

Desenhando Imagens (1) Criar uma variável do tipo Image: Image minha_imagem; OBS: Sempre declare as variáveis Image como variáveis globais. Exemplo: #include "Graphics.h" using namespace GraphicsLib; Graphics graphics; Image minha_imagem1; Image minha_imagem2; Variáveis Image declaradas no inicio do programa. Antes e fora da função principal ou outras funções. int main(void) {...

Desenhando Imagens (2) Carregar a imagem do arquivo usando o comando LoadPNGImage: minha_imagem.loadpngimage("mario.png"); Exemplo: int main(void) {... minha_imagem.loadpngimage("mario.png");... } Carrega a imagem do arquivo Mario.png para a variável minha_imagem. OBS: Cada imagem deve ser carregada apenas uma vez. Por isso, nunca carregue a imagem diretamente de dentro do Loop Principal.

Desenhando Imagens (3) Desenhar efetivamente a imagem na tela usando o comando DrawImage2D. graphics.drawimage2d(200, 200, 256, 256, minha_imagem); Exemplo: void MainLoop() {...... } graphics.drawimage2d(200, 200, 256, 256, minha_imagem); Desenha a imagem minha_imagem na posição (200, 200) com tamanho (256, 256) na tela.

Desenhando Imagens Também é possível definir a posição e tamanho das imagens em variáveis armazenadas dentro do objeto Image. Para isso, deve-se: 1) Criar uma variável do tipo Image: Image minha_imagem; 2) Carregar a imagem do arquivo usando o comando LoadPNGImage: minha_imagem.loadpngimage("mario.png"); 3) Definir a posição da imagem com o comando SetPosition: minha_imagem.setposition(100,100,256,256); 4) Desenhar a imagem na tela com o comando DrawImage2D: graphics.drawimage2d(minha_imagem);

Desenhando Imagens Carregando uma Imagem: void Image.LoadPNGImage(char *filename); Exemplo: Image mario; mario.loadpngimage("mario.png"); Declaração da variável do tipo Image que vai armazenar a imagem Carrega o arquivo Mario.png para a variável mario

Desenhando Imagens Desenhando Imagens na Tela: void DrawImage2D(int x, int y, int width, int height, Image image); void DrawImage2D(Image image); Exemplo: graphics.drawimage2d(200, 200, 256, 256, mario); Desenha a imagem mario na posição (200, 200) com tamanho (256, 256) na tela.

Desenhando Imagens Definindo a Posição uma Imagem: void Image.SetPosition(int x, int y, int width, int height); Exemplo: mario.setposition(200, 200, 256, 256); Define a posição da imagem mario na posição (200, 200) com tamanho (256, 256)

Desenhando Imagens Observações importantes sobre imagens: Somente são aceitas imagens no formato PNG. Mas isso não é uma limitação, o formato PNG é um dos melhores formatos para esse tipo de aplicação. A principal vantagem é que ele permite o uso de transparência nas imagens. Cerifique-se de que as imagens que serão lidas estão dentro da pasta do seu projeto do Visual Studio. Se preferir armazena-las em outras pastas você deve fornecer o caminho completo para o diretório onde as imagens estão para o comando LoadPNGImage. Se a sua imagem estiver em outro formado (JPG, GIF, BMP...) você deve convertê-la para o formato PNG antes de carrega-la.

Tratando Entradas do Teclado Para poder tratar os eventos gerados pelo teclado (teclas sendo pressionadas) é necessário criar uma função para essa tarefa. Essa função deve ter a seguinte sintaxe: void KeyboardInput(unsigned char key, int x, int y) { } /* Bloco de Comandos */ Também é necessário indicar que essa é a sua função para tratar eventos de teclado: graphics.setkeyboardinput(keyboardinput);

Tratando Entradas do Teclado Dessa forma, sempre que uma tecla normal do teclado for pressionada a função KeyboardInput será executada e o parâmetro key indicará qual tecla foi pressionada. Exemplo: void KeyboardInput(unsigned char key, int x, int y) { } if (key == 'f') { } graphics.setfullscreen(true); if (key == 'w') { posicao_personagem_x = posicao_personagem_x + 2; } if (key == KEY_ESC) { } exit(0); Se a letra f for pressionada Coloca o programa em tela cheia Se a letra w for pressionada Incrementa em +2 uma variável que representa a posição de um personagem Se a tecla esc for pressionada Fecha o programa

Tratando Entradas do Teclado Algumas teclas especiais, como por exemplo as setas direcionais do teclado, requerem o uso de outra função especifica para elas. Essa função deve ter a seguinte sintaxe: void KeyboardSpecialInput(int key, int x, int y) { } /* Bloco de Comandos */ Também é necessário indicar que essa é a sua função para tratar eventos de teclado especiais: graphics.setkeyboardspecialinput(keyboardspecialinput);

Tratando Entradas do Teclado Dessa forma, sempre que uma tecla especiais do teclado for pressionada a função KeyboardSpecialInput será executada e o parâmetro key indicará qual tecla foi pressionada. Exemplo: void KeyboardSpecialInput(int key, int x, int y) { if (key == KEY_LEFT) { posicao_personagem_x = posicao_personagem_x - 2; } if (key == KEY_RIGHT) { posicao_personagem_x = posicao_personagem_x + 2; } } Se a tecla direcional esquerda for pressionada Decrementa em -2 uma variável que representa a posição de um personagem Se a tecla direcional direita for pressionada Incrementa em +2 uma variável que representa a posição de um personagem

Códigos das Teclas Especiais KEY_LEFT KEY_UP KEY_RIGHT KEY_DOWN KEY_PAGE_UP KEY_PAGE_DOWN KEY_HOME KEY_END KEY_INSERT KEY_ESC KEY_F1 KEY_F2 KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8 KEY_F9 KEY_F10 KEY_F11 KEY_F12

Tratando Cliques do Mouse Para poder tratar os eventos gerados pelo mouse (cliques do mouse) é necessário criar uma função para essa tarefa. Essa função deve ter a seguinte sintaxe: void MouseClickInput(int button, int state, int x, int y) { } /* Bloco de Comandos */ Também é necessário indicar que essa é a sua função para tratar eventos de clique do mouse: graphics.setmouseclickinput(mouseclickinput);

Tratando Cliques do Mouse Dessa forma, sempre que um botão do mouse for pressionado a função MouseClickInput será executada e o parâmetro button indicará qual botão foi pressionado. Os parâmetros x e y indicam a posição na tela em que mouse estava quando o clique foi realizado. Exemplo: Se o botão esquerdo foi pressionado void MouseClickInput(int button, int state, int x, int y) { } if ((button == MOUSE_LEFT_BUTTON)&&(state == MOUSE_STATE_DOWN)) { } destino_x = x; destino_y = y; As variáveis destino_x e destino_y recebem a posição x e y do mouse no momento do clique, ou seja, onde o usuário clicou.

Códigos da Teclas do Mouse Botões: Estados: MOUSE_LEFT_BUTTON MOUSE_MIDDLE_BUTTON MOUSE_RIGHT_BUTTON MOUSE_STATE_DOWN MOUSE_STATE_UP

Tratando o Movimento do Mouse Para poder tratar os eventos de movimento gerados pelo mouse é necessário criar uma função para essa tarefa. Essa função deve ter a seguinte sintaxe: void MouseMotionInput(int x, int y) { /* Bloco de Comandos */ } Também é necessário indicar que essa é a sua função para tratar eventos de movimento do mouse: graphics.setmousemotioninput(mousemotioninput);

Tratando o Movimento do Mouse Dessa forma, sempre que o mouse for movimentado pelo usuário a função MouseClickInput será executada e os parâmetros x e y indicaram a posição do mouse na tela. Exemplo: void MouseMotionInput(int x, int y) { mouse_x = x; mouse_y = y; } As variáveis mouse_x e mouse_y recebem a posição x e y do mouse, ou seja, o local onde o usuário está com o cursor do mouse.

Tratando o Movimento com Clique do Mouse Para poder tratar os eventos de movimento gerados pelo mouse enquanto o usuário estiver com o botão do mouse pressionado é necessário criar uma função para essa tarefa. Essa função é útil para tratar situações onde o usuário deve clicar e arrastar um objeto para outra posição. A função para tratar esse evento deve ter a seguinte sintaxe: void MouseClickMotionInput(int x, int y) { } /* Bloco de Comandos */ Também é necessário indicar que essa é a sua função para tratar eventos de movimento do mouse enquanto o botão do mouse estiver pressionado: graphics.setmouseclickmotioninput(mouseclickmotioninput);

Tratando o Movimento com Clique do Mouse Dessa forma, sempre que o mouse for movimentado pelo usuário a função MouseClickInput será executada e os parâmetros x e y indicaram a posição do mouse na tela. Exemplo: void MouseClickMotionInput(int x, int y) { mouse_x = x; mouse_y = y; } As variáveis mouse_x e mouse_y recebem a posição x e y do mouse, ou seja, o local onde o usuário está com o cursor do mouse mouse.

Tratando Cliques do Mouse Sobre uma Imagem Para poder tratar os eventos de clique do mouse sobre uma determinada imagem é necessário definir uma função para essa tarefa. A função para tratar esse evento deve ter a seguinte sintaxe: void MouseClickMinhaImagem(int button, int state, int x, int y) { } /* Bloco de Comandos */ Também é necessário indicar que essa é a sua função para tratar eventos de clique do mouse sobre a imagem em questão usando o comando SetOnClick: MinhaImagem.SetOnClick(MouseClickMinhaImagem);

Tratando o Movimento com Clique do Mouse Dessa forma, sempre que o usuário clicar sobre a imagem MinhaImagem, a função MouseClickMinhaImagem será executada e o parâmetro button indicará qual botão foi pressionado. Os parâmetros x e y indicam a posição na tela relativa a imagem em que mouse estava quando o clique foi realizado. Exemplo: void MouseClickMinhaImagem(int button, int state, int x, int y) { carregando_imagem = true; }

Tratando o Movimento com Clique do Mouse Importante: Para poder usar este evento é necessário que a posição da imagem tenha sido definida com o comando SetPosition. Exemplo: Image minha_imagem; void MouseClickMinhaImagem(int button, int state, int x, int y) { clicou_na_imagem = true; } int main(void) { }... minha_imagem.loadpngimage("marvin.png"); minha_imagem.setposition(0,100,256,256); minha_imagem.setonclick(mouseclickmarvin);...