Я хотел бы отобразить изображение в определенной области в соответствии с переменной. Например, когда пользователь нажимает на аватар, отображается конкретное изображение. Когда он нажимает на другой аватар, отображается другое изображение.

Я попытался удалить предыдущее изображение и отобразить новое, но он сказал: «Попытайтесь вызвать removeself () с нулевым значением».

Определите таблицу в начале:

local item_bigsize = {}

Итак, я попробовал это:

item[i] = display.newImageRect("items/"..items['pos'..i..'_name']..".png", 80 , 80)
item[i].x = holder_2[i].x+10
item[i].anchorX=0
item[i].y=holder_2[i].y
itemGroup:insert (item[i])
item[i].destination=i
item[i]:addEventListener( "touch", onSwitchPress )

А функция onSwitchPress () работает так:

function onSwitchPress( event )

i=event.target.destination

if (event.phase=="began") then

    title_item.text=""
    desc_item.text=""

    for n=1,3 do
        if n~=i then
            item_bigsize[n]:removeSelf( )
        end
        n=n+1
    end

elseif (event.phase == "ended") then

        item_bigsize[i] = display.newImageRect("items/"..items['pos'..i..'_name']..".png", 240 , 240)
        item_bigsize[i].x = 950
        item_bigsize[i].anchorX=0
        item_bigsize[i].y=display.contentCenterY-130
        group:insert (item_bigsize[i])


    title_item.text=items['pos'..i..'_title']
    desc_item.text=items['pos'..i..'_details']

end  


end
2
Mehmet Ait Addi 17 Окт 2014 в 20:55

4 ответа

Лучший ответ

Вместо того:

if n~=i then
  item_bigsize[n]:removeSelf( )
end

Пытаться:

if(n~=i and item_bigsize[n].x~=nil)then --Check whether the object/properties exists
  item_bigsize[n]:removeSelf()
end

Продолжайте кодировать ................ :)

2
Krishna Raj Salim 23 Окт 2014 в 15:58
for n=1,3 do
    if n~=i then
        item_bigsize[n]:removeSelf( )
    end
    n=n+1
end

Прежде всего, почему вы увеличиваете значение n вручную, цикл for автоматически увеличивает n на 1, поэтому вы не увеличиваете его.

Итак, что здесь происходит в первый раз, когда i = 1 и n = 1, условие не выполняется, оно не удаляется.

Второй раз n увеличивается на, и вы вручную увеличиваете n на 1, так что оно станет равным трем условиям, которым удовлетворяет, потому что i будет 2 и войдет в цикл, он попытается удалить изображение item_bigsize [3]: removeSelf (), которое является нет.

Я думаю, что это может быть возможная ошибка, поэтому удалите n = n + 1.

for n=1,3 do
    if n~=i then
        item_bigsize[n]:removeSelf( )
    end
end   
0
Kumar KS 18 Окт 2014 в 05:39

У тебя нет

item_bigsize[i]

Потому что «i» не является целым числом, которое вы хотите перебрать для «for».

0
Lukis 18 Окт 2014 в 20:37

Наконец, я решил скрыть / показать элементы, как сказал @albert в предыдущем комментарии (более простой). Я также предпочитаю работать с DataBase SQLite3 вместо файлов, потому что это быстрее.

Вот решение:

function ShowItems( event )


local count = 1
local sql = "SELECT * FROM items WHERE active='oui'"

n=1
number=0

    for x in db:urows "select count(*) from items" do 

            for row in db:nrows(sql) do

                            item[count] = display.newImageRect("items/"..row.src..".png", 80 , 80)
                            if n <= 7 then 
                                item[count].x = holder[n].x+10
                                item[count].y=holder[n].y
                            elseif n >= 8 and n<15 then
                                item[count].x = holder_2[n].x+10
                                item[count].y=holder_2[n].y
                            elseif n >=15 and n<=21 then
                                item[count].x = holder_3[n].x+10
                                item[count].y=holder_3[n].y
                            end
                            item[count].anchorX=0
                            itemGroup:insert (item[count])
                            item[count].destination=row.id
                            item[count]:addEventListener( "touch", onSwitchPress )
                            n=n+1  


                            item_bigsize[count] = display.newImageRect("items/"..row.src..".png", 240 , 240)
                            item_bigsize[count].x = 950
                            item_bigsize[count].anchorX=0
                            item_bigsize[count].y=display.contentCenterY-130
                            bigimages:insert (item_bigsize[count])
                            item_bigsize[count].isVisible=false                   


            count = count + 1
            end

        end  

end

И моя функция для отображения изображений "большого" размера:

function onSwitchPress( event )

i=event.target.destination

    if (event.phase=="began") then

        number = n-1
        number_equip = a-1

        title_item.text=""
        desc_item.text=""

        item_bigsize[i].isVisible=true

                            if n <= 7 then 
                                holder[i].alpha=1
                            elseif n >= 8 and n<15 then
                                holder_2[i].alpha=1
                            elseif n >=15 and n<=21 then
                                holder_3[i].alpha=1
                            end    

                      for increment=1,number do
                            if increment~=i then
                                  if item_bigsize[increment]~= nil then
                                      item_bigsize[increment].isVisible=false
                                        if n <= 7 then 
                                            holder[increment].alpha=0.5
                                        elseif n >= 8 and n<15 then
                                            holder_2[increment].alpha=0.5
                                        elseif n >=15 and n<=21 then
                                            holder_3[increment].alpha=0.5
                                        end

                                      --print( increment )
                                  end

                              end
                      end

    elseif (event.phase == "ended") then                                    

        result = "SELECT name,desc FROM items WHERE id ="..i..""

        for col1,col2 in db:urows( result ) do
            title_item.text=col1
            desc_item.text=col2
        end
    end  


end

Мне это решение подходит!

0
Mehmet Ait Addi 22 Окт 2014 в 11:03