ahsc 1 Denunciar post Postado Dezembro 17, 2009 Olá a todos. Estou com um probleminha aqui e não consigo resolvê-lo. Estou montando um sisteminha em flash e preciso que os mc's sejam dragáveis. Até aí não tem problema, foi fácil. Porém, eu gostaria de desabilitar o drag quando esse mc fizesse o evento do hitTest(); ou seja, assim que ele bater em algo o mc pára de ser dragável e só volta quando um determinado botão for pressionado. Até esse ponto jóia, utilizei uma flag para identificar cada objeto e à medida que o objeto efetuava o evento de hitTest(); ele alterava a flag daquele objeto. Só que como se tratam de vários mcs(objeto), a quantidade de variáveis ficaria muito grande de forma que eu resolvi criar funções e dessas funções passar parâmetros que habilitariam ou não o drag(). O que eu preciso: quando o clipe é executado os mcs presiam estar liberados para o drag(); e isso eu fiz usando uma função que insere em uma array a estância do mc que eu quero manipular e um número boleano (1 ou 0) para liberar ou não o drag(). No mc que seria arrastado eu chamo uma outra função que vai checar a array que os dados foram inseridos para saber se ele pode ou não ser arrastado. desta forma o estrutura que eu gostaria que fosse executada seria a seguinte: uma array multi dimensional arraychecagem[] = arrayatributos_do_objeto[estância do objeto, boleano]; eu tentei criar essa arry dinâmica mais não deu certo. fiz assim: //função para habilitar um objeto para ser arrastado function habilitaDrag(objeto, valor) { /*a idéia aqui é criar uma array multidimensional do tipo: dragaveis[0] = ["objeto", "valor"]; dragaveis[1] = ["objeto", "valor"]; só que dessa forma não funciona e eu não consegui achar uma solução. Aqui é o meu problema. */ dragaveis.push(valida.push(objeto),valida.push(objeto)); } quando o filme inicia (evento load) eu chamo a função e passo para ela qual objeto quero que seja arrastado. o evento está no mc que está no palco eis o código. onClipEvent(load){ _root.posicaoObjetos(this,110, 23); /*quando carregar, habilita o objeto para ser arrastado*/ _root.habilitaDrag(this,1); } após habilitado para o drag, quando o usuário clica (press) no objeto ele chama outra função para verificar se ele pode ou não ser arrastado. Eis o código: on (press) { _root.arrastar(this); } e aqui a função que faz o objeto se arrastado conforme sua situação dentro da array dragáveis. function arrastar(objeto, valor) { //looping para verificar quantos itens há na array looping = dragaveis.length; for(i=0; i<looping; i++) { //se a posição [0][1] tiver um boleano 1 (pode arrastar) if(dragaveis[i][1] == 1) { //se o objeto da posição 0 da array for igual a instância passada pode arrastar if(dragaveis[i][0] == objeto) { objeto.startDrag(); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]); } else { trace("o objeto não pode ser arrastado"); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]) } } } } não sei se é algum problema de lógica ou se está errado a função que cria a array multidimensional mais o fato é que para um objeto funciona, para vários não. Pelo que pude ver aqui o problema maior está na criação da array multidimensional se alguém puder me dar uma forcinha..... Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Dezembro 17, 2009 Olá a todos. Estou com um probleminha aqui e não consigo resolvê-lo. Estou montando um sisteminha em flash e preciso que os mc's sejam dragáveis. Até aí não tem problema, foi fácil. Porém, eu gostaria de desabilitar o drag quando esse mc fizesse o evento do hitTest(); ou seja, assim que ele bater em algo o mc pára de ser dragável e só volta quando um determinado botão for pressionado. Até esse ponto jóia, utilizei uma flag para identificar cada objeto e à medida que o objeto efetuava o evento de hitTest(); ele alterava a flag daquele objeto. Só que como se tratam de vários mcs(objeto), a quantidade de variáveis ficaria muito grande de forma que eu resolvi criar funções e dessas funções passar parâmetros que habilitariam ou não o drag(). O que eu preciso: quando o clipe é executado os mcs presiam estar liberados para o drag(); e isso eu fiz usando uma função que insere em uma array a estância do mc que eu quero manipular e um número boleano (1 ou 0) para liberar ou não o drag(). No mc que seria arrastado eu chamo uma outra função que vai checar a array que os dados foram inseridos para saber se ele pode ou não ser arrastado. desta forma o estrutura que eu gostaria que fosse executada seria a seguinte: uma array multi dimensional arraychecagem[] = arrayatributos_do_objeto[estância do objeto, boleano]; eu tentei criar essa arry dinâmica mais não deu certo. fiz assim: //função para habilitar um objeto para ser arrastado function habilitaDrag(objeto, valor) { /*a idéia aqui é criar uma array multidimensional do tipo: dragaveis[0] = ["objeto", "valor"]; dragaveis[1] = ["objeto", "valor"]; só que dessa forma não funciona e eu não consegui achar uma solução. Aqui é o meu problema. */ dragaveis.push(valida.push(objeto),valida.push(objeto)); } quando o filme inicia (evento load) eu chamo a função e passo para ela qual objeto quero que seja arrastado. o evento está no mc que está no palco eis o código. onClipEvent(load){ _root.posicaoObjetos(this,110, 23); /*quando carregar, habilita o objeto para ser arrastado*/ _root.habilitaDrag(this,1); } após habilitado para o drag, quando o usuário clica (press) no objeto ele chama outra função para verificar se ele pode ou não ser arrastado. Eis o código: on (press) { _root.arrastar(this); } e aqui a função que faz o objeto se arrastado conforme sua situação dentro da array dragáveis. function arrastar(objeto, valor) { //looping para verificar quantos itens há na array looping = dragaveis.length; for(i=0; i<looping; i++) { //se a posição [0][1] tiver um boleano 1 (pode arrastar) if(dragaveis[i][1] == 1) { //se o objeto da posição 0 da array for igual a instância passada pode arrastar if(dragaveis[i][0] == objeto) { objeto.startDrag(); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]); } else { trace("o objeto não pode ser arrastado"); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]) } } } } não sei se é algum problema de lógica ou se está errado a função que cria a array multidimensional mais o fato é que para um objeto funciona, para vários não. Pelo que pude ver aqui o problema maior está na criação da array multidimensional se alguém puder me dar uma forcinha..... Porque você não deixa o array de lado e tenta fazer com variáveis boolean simples dentro do movieClip, ao bater em algum lugar essa variável chaveia, e quando você clicar no tal determinado botao a variavel volta, será que não fica mais simples? Compartilhar este post Link para o post Compartilhar em outros sites
ahsc 1 Denunciar post Postado Dezembro 17, 2009 Assim eu até já fiz, mais vai ter uma quantidade enorme de variáveis devido ao grande número de objetos que serão mostrados. O sistema é daquele tipo de "monte seu produto" daí você imagina quantas possibilidades são. Da forma que você sugeriu eu fiz e até aí não tem problema. O maior problema disso é na manutenção. Muitas variáveis dificulta a vida. Se usar funções aí sim fica fácil. você sabe criar array's multidimensionais dinâmicas? O meu problema tá justo na criação dela. vlw Olá a todos. Estou com um probleminha aqui e não consigo resolvê-lo. Estou montando um sisteminha em flash e preciso que os mc's sejam dragáveis. Até aí não tem problema, foi fácil. Porém, eu gostaria de desabilitar o drag quando esse mc fizesse o evento do hitTest(); ou seja, assim que ele bater em algo o mc pára de ser dragável e só volta quando um determinado botão for pressionado. Até esse ponto jóia, utilizei uma flag para identificar cada objeto e à medida que o objeto efetuava o evento de hitTest(); ele alterava a flag daquele objeto. Só que como se tratam de vários mcs(objeto), a quantidade de variáveis ficaria muito grande de forma que eu resolvi criar funções e dessas funções passar parâmetros que habilitariam ou não o drag(). O que eu preciso: quando o clipe é executado os mcs presiam estar liberados para o drag(); e isso eu fiz usando uma função que insere em uma array a estância do mc que eu quero manipular e um número boleano (1 ou 0) para liberar ou não o drag(). No mc que seria arrastado eu chamo uma outra função que vai checar a array que os dados foram inseridos para saber se ele pode ou não ser arrastado. desta forma o estrutura que eu gostaria que fosse executada seria a seguinte: uma array multi dimensional arraychecagem[] = arrayatributos_do_objeto[estância do objeto, boleano]; eu tentei criar essa arry dinâmica mais não deu certo. fiz assim: //função para habilitar um objeto para ser arrastado function habilitaDrag(objeto, valor) { /*a idéia aqui é criar uma array multidimensional do tipo: dragaveis[0] = ["objeto", "valor"]; dragaveis[1] = ["objeto", "valor"]; só que dessa forma não funciona e eu não consegui achar uma solução. Aqui é o meu problema. */ dragaveis.push(valida.push(objeto),valida.push(objeto)); } quando o filme inicia (evento load) eu chamo a função e passo para ela qual objeto quero que seja arrastado. o evento está no mc que está no palco eis o código. onClipEvent(load){ _root.posicaoObjetos(this,110, 23); /*quando carregar, habilita o objeto para ser arrastado*/ _root.habilitaDrag(this,1); } após habilitado para o drag, quando o usuário clica (press) no objeto ele chama outra função para verificar se ele pode ou não ser arrastado. Eis o código: on (press) { _root.arrastar(this); } e aqui a função que faz o objeto se arrastado conforme sua situação dentro da array dragáveis. function arrastar(objeto, valor) { //looping para verificar quantos itens há na array looping = dragaveis.length; for(i=0; i<looping; i++) { //se a posição [0][1] tiver um boleano 1 (pode arrastar) if(dragaveis[i][1] == 1) { //se o objeto da posição 0 da array for igual a instância passada pode arrastar if(dragaveis[i][0] == objeto) { objeto.startDrag(); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]); } else { trace("o objeto não pode ser arrastado"); //trace(dragaveis[i][0]); //trace(dragaveis[i][1]) } } } } não sei se é algum problema de lógica ou se está errado a função que cria a array multidimensional mais o fato é que para um objeto funciona, para vários não. Pelo que pude ver aqui o problema maior está na criação da array multidimensional se alguém puder me dar uma forcinha..... Porque você não deixa o array de lado e tenta fazer com variáveis boolean simples dentro do movieClip, ao bater em algum lugar essa variável chaveia, e quando você clicar no tal determinado botao a variavel volta, será que não fica mais simples? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 18, 2009 tirei o "valida" da função, não sei para que ele estava ali, tenta fazer dessa forma: //função para habilitar um objeto para ser arrastado function habilitaDrag(objeto, valor) { dragaveis.push([objeto, valor]); }só para constar, você esta declarando a "dragaveis" fora dessa função né? []´s Compartilhar este post Link para o post Compartilhar em outros sites
ahsc 1 Denunciar post Postado Dezembro 18, 2009 Resolvi. Bom, a idéia era criar uma função que eu pudesse utilizar independente do número de objetos a serem utilizados(arrastados). seguem as funções. 1º função para inicializar o objeto que será dragável. function habilitaDrag(objeto, valor) { /*inicializa as arrays. a outerArray será multidimensional que vai armazenar quem será arrastado e um boleano 0 ou 1 de false ou true que servirá de parâmetro para que o objeto seja ou não dragavel*/ var outerArray:Array = new Array //array que vai armazenar o objeto que será dragavel e seu valor (0 ou 1) var subArray1 = new Array(objeto, valor); //outerArray será a array multidimensional outerArray.push(subArray1); //se o valor passado para o objeto for 0 o objeto vai ficar com alpha = 65 e a "mãozinha" do mouse será escondida if(valor == 0) { objeto._alpha = 65; objeto.useHandCursor = false; } //trace(outerArray); } Agora vem a chamda da função. Lembrando que eu utilizei essa função num mc. onClipEvent(load){ /*quando carregar, habilita o objeto para ser arrastado onde "this" é a referência do próprio objeto*/ _root.habilitaDrag(this,0); } no mesmo mc ainda, ponha esse código para que ao pressionar a função que faz o drag seja invocada. daí ela vai verificar se esse objeto pode ou não ser dragado. o drag é definido por você no momento do onload. on (press) { //onde arrastar e a função que faz o drag. Repare que apenas um parâmetro é passado, ou seja, o próprio mc _root.arrastar(this); } agora a função que faz o drag function arrastar(objeto) { //looping para verificar a quantidade de elemento na array for(j=0; j<outerArray.length; j++) { //agora o looping para verificar a quantidade de itens da segunda array (subArray1) for(k=0; k<outerArray[j].length; k++) { /*agora vamos verificar o seguinte: uma array multidimensional é formada assim: array[n] = ["objeto0", "objeto1"] onde o objeto0 é o nosso objeto(mc) e o objeto1 é o valor boleano(0 ou 1) e a array[n] é a array outerArray. se o objeto1 == 1 (outerArray[j][1]) e o objeto0 == ao objeto passado na função então o drag é iniciado*/ if(outerArray[j][1] == 1 and outerArray[j][0]==objeto) { objeto.startDrag(); objeto._alpha = 100; objeto.useHandCursor = true; } /*se o valor do objeto1 == 0 (não pode arrastar) e o objeto0 == o objeto então não arrasta */ if(outerArray[j][1] == 0 and outerArray[j][0] == objeto) { objeto.stopDrag(); objeto.useHandCursor = false; } } } } Se quiser parar o drag para um determinado evento basta colocar esso código. utilizarei o evento hitTest() que tb está no mc if (this.hitTest(this._parent.objetoMontar_mc)) { _root.habilitaDrag(this,0); } é isso. obrigado a quem tentou me ajudar. Isso. O meu problema estava em como montar a array multidimensional. mais consegui resolver e funfa que é uma beleza. Pus om post com todas a funções utilizadas e como utilizá-las. Acho que vai ajudar. vlw tirei o "valida" da função, não sei para que ele estava ali, tenta fazer dessa forma: //função para habilitar um objeto para ser arrastado function habilitaDrag(objeto, valor) { dragaveis.push([objeto, valor]); }só para constar, você esta declarando a "dragaveis" fora dessa função né? []´s Compartilhar este post Link para o post Compartilhar em outros sites