2014-10-17 2 views
2

변수에 따라 이미지를 특정 영역에 표시하고 싶습니다. 예를 들어 사용자가 아바타를 클릭하면 특정 이미지가 표시됩니다. 그가 다른 아바타를 클릭하면 다른 이미지가 표시됩니다.이미지 표시 및 변수에 따라 숨기기

나는 이전 이미지를 제거하고 새로운 이미지를 표시하려했지만 "무기 값으로 requireself()를 호출하려고했습니다"라고 말했습니다.

시작 테이블을 정의

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 
+0

당신이 정의하는 경우 "item_bigsize []"테이블? (또한 해당 테이블 내에서 색인 n을 잊어 버렸습니다.) – rsc

+0

"필수 파일"바로 다음에 시작 파일 LUA에서 –

+1

'item [i] .isVisible = true'를 사용하여 이미지를 표시하고'false '를 사용하여 숨길 수 있습니다 그들. – Albert

답변

2

대신 :

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 

................ 코딩 유지 :

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

우선 왜 당신의 가치를 증가 시키는가? 수동으로, for 루프는 자동으로 n을 1 씩 증가시킵니다. 따라서 증가시키지 마십시오.

그래서 여기서 처음으로 i = 1과 n = 1이 발생하면 조건이 실패하고 제거되지 않습니다.

두 번째 시간 n이 1 씩 증가하므로 수동으로 n을 1 씩 늘리므로 조건이 만족 될 것입니다. 왜냐하면 나는 2가되어 루프에 들어가기 때문에 이미지를 제거하려고 시도합니다. item_bigsize [3] : removeSelf() 존재하지 않습니다.

이것이 가능한 오류 일 수 있으므로 n = n + 1을 제거하십시오. "나는"당신이 "를"에서 반복 할 정수가 아니므로

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

여전히 작동하지 않습니다! 나는 필드 '를 색인하려고 시도한다고 말하니?' (nil 값). 사실 이미지를 "제거"하는 코드의 위치가 정확한지 궁금합니다. –

+0

그건 그렇고 .. 첫째, 나는 자동으로 같지 않습니다 1! "i"는 "event.target.destination"의 결과입니다. 따라서 사용자가 항목 # 1을 클릭하면 item_bigsize [1]가 제거되지 않고 다른 모든 항목은 2에서 3으로 제거됩니다 (예 :). –

0

당신은

item_bigsize[i] 

이 없습니다.

+0

자세한 내용을 입력하십시오. 왜 "item_bigsize [i]"가 없습니까? –

+0

그래서 "item [i] = display.newImageRect"의 "i"값이 무엇인지 설명하십시오. – Lukis

+0

"i"값은 "item [i] .destination"에 대해 오는 값이고 표시해야하는 항목의 ID입니다. . –

0

마지막으로 @albert가 이전 댓글에서 말한 것처럼 항목을 숨기거나 표시하도록 선택했습니다 (더 간단합니다). 또한 파일이 빠르기 때문에 데이터베이스 대신 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 

이 솔루션은 나를 위해 잘 작동합니다!

관련 문제