Code Bugs

Getting into LiveCode for iOS? Ask your questions here.

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Code Bugs

Post by itay1023 » Wed Dec 25, 2013 3:54 pm

Hi All,
I am building know an app (Game) for the iOS Platform.

At a specific place in my game, if i drag a button, it needs to check if it was intersected with another objects.
There is a bug that during the collision check, it seems like the game detects a collision, and the score comes down or up also the life.
Here is the code:

Code: Select all

local LocVar
global _life

local tMessageID

global _startTheGame
global _score
global blackVar

on mouseDown
     if _startTheGame =false then
    exit mousedown
  end if

  put the loc of me into LocVar

if _startTheGame is true
then
  grab me
end if
  theButtonVar
end mouseDown

on mouseUp
  set the loc of me to LocVar

  cancel tMessageID
end mouseUp

on theButtonVar
  if intersect (btn "theButton" of card "gameCardNew", button "blueBubble" of card "gameCardNew", "pixels") then

   popSound
    hide button "blueBubble"
    set the loc of btn "blueBubble" to 581,269
    add 10 to _score
    put _score into fld "score" of this card
    hide btn "blueBubble"
  end if

  theButtonVar2
end theButtonVar

on theButtonVar2
  if intersect (btn "theButton" of card "gameCardNew", button "redBubble" of card "gameCardNew", "20") then
    add -1 to _life
    put _life into fld "life"
    hide button "redBubble"
    set the loc of btn "redBubble" to 581,269
    SavedRedBubbleActions
  end if

theButtonVar3
end theButtonVar2

on theButtonVar3
  if intersect (btn "theButton" of card "gameCardNew", button "goldBubble" of card "gameCardNew", "pixels") then
    add 100 to _score
    put _score into fld "score"
    hide btn "goldBubble" of card "gameCardNew"
    set the loc of btn "goldBubble" to 581,269
  end if
  theButtonVar4
end theButtonVar3

on theButtonVar4
  if intersect (btn "theButton" of card "gameCardNew", button "blackBubble" of card "gameCardNew", "pixels") then
    add -50 to _score
    hide btn "blackBubble"
    set the loc of btn "blackBubble" to 581,269
    put _score into fld "score"
  end if
  theButtonVar5
end theButtonVar4

on theButtonVar5
  if intersect (btn "theButton" of card "gameCardNew", btn "heartBubble" of card "gameCardNew", "pixels") then
    add 1 to _life
    put _life into fld "life" of card "gameCardNew"
    hide btn "heartBubble" of card "gameCardNew"
    set the loc of btn "heartBubble" to 581,269
  end if

  send "theButtonVar" to me in 100 millisecs

  put the result into  tMessageID 
end theButtonVar5 

Does someone can help me please?


Best regards,
Itay :)

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Sun Dec 29, 2013 3:01 pm

Hi Itay,

I think that grab is blocking. It means that your script will not continue to run until you release the mouse/finger. You maybe want to use

Code: Select all

local lMouseClicked

on mouseDown
  put true into lMouseClicked
end mouseDown

on mouseMove
  if lMouseClicked is true then
    -- do something
  end if
end mouseMove

on mouseUp
  put false into lMouseClicked
end mouseUp
You might also use the touch commands. Search the docs for "touch".

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Mon Dec 30, 2013 3:39 pm

It still doesn't work well.

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 1:40 am

Hi,

"It doesn't work" doesn't mean anything to a programmer. What happens and what do you expect or want to happen instead?

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 1:50 pm

See the code i wrote at the first message.
The button with that code, doesn't work well.
It detects a collision without a reason...

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 2:59 pm

Hi,

Have you actually tried using the mouseDown, mouseMove and mouseUp messages? Does this still detect collision without reason?

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 4:02 pm

Yes, i tried those commands and it still doesn't work well.

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 4:14 pm

Why don't you post your new script or provide some more information?

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 4:34 pm

Here is my new script: :-)

Code: Select all

local LocVar
global _life
local lMouseClicked

local tMessageID

global _startTheGame
global _score
global blackVar



on mouseDown
   put true into lMouseClicked
     if _startTheGame =false then
          exit mousedown
   else
      grab me
  end if

put the loc of me into LocVar


  theButtonVar

end mouseDown


on mouseMove
   if lMouseClicked is true then
      theButtonVar
      end if
end mouseMove

on mouseUp
   put false into lMouseClicked
  set the loc of me to LocVar

  cancel tMessageID
end mouseUp

on theButtonVar
  if intersect (btn "theButton" of card "gameCardNew", button "blueBubble" of card "gameCardNew", "opaque pixels") then

   popSound
    hide button "blueBubble" ## with visual effect dissolve fast
    set the loc of btn "blueBubble" to -100,-100
    add 10 to _score
    put _score into fld "score" of this card
    hide btn "blueBubble"
  end if


  theButtonVar2
end theButtonVar

on theButtonVar2
  if intersect (btn "theButton" of card "gameCardNew", button "redBubble" of card "gameCardNew", "opaque pixels") then
       popSound
   add -1 to _life
       put _life into fld "life"
    hide button "redBubble"
    set the loc of btn "redBubble" to 100,-100
    SavedRedBubbleActions
  end if


theButtonVar3
end theButtonVar2

on theButtonVar3
  if intersect (btn "theButton" of card "gameCardNew", button "goldBubble" of card "gameCardNew", "opaque pixels") then
   popSound    
   add 100 to _score
    put _score into fld "score"
    hide btn "goldBubble" of card "gameCardNew"
    set the loc of btn "goldBubble" to 100,-100
  end if
  theButtonVar4
end theButtonVar3

on theButtonVar4
  if intersect (btn "theButton" of card "gameCardNew", button "blackBubble" of card "gameCardNew", "opaque pixels") then
   popSound   
    add -50 to _score
    hide btn "blackBubble"
    set the loc of btn "blackBubble" to 100,-100
    put _score into fld "score"
  end if
  theButtonVar5
end theButtonVar4

on theButtonVar5
   if intersect (btn "theButton" of card "gameCardNew", btn "redBubble2" of card "gameCardNew", "opaque pixels") then
   popSound    
   add -1 to _life
    put _life into fld "life" of card "gameCardNew"
    hide btn "redBubble2" of card "gameCardNew"
    set the loc of btn "redBubble2" to 100,-100
end if
theButtonVar6
end theButtonVar5

on theButtonVar6
  if intersect (btn "theButton" of card "gameCardNew", btn "heartBubble" of card "gameCardNew", "opaque pixels") then
   popSound    
   add 1 to _life
    put _life into fld "life" of card "gameCardNew"
    hide btn "heartBubble" of card "gameCardNew"
    set the loc of btn "heartBubble" to 100,-100
  end if
  

  send "theButtonVar" to me in 100 millisecs


  put the result into  tMessageID 
end theButtonVar6 


Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 4:55 pm

Hi,

You have to remove the "grab me" command from your script. That's the point of using mouseMove instead. The mouseMove handler checks if the mouse was clicked and then can set the location of controls and check for intersections.

On iOS, there is a problem with mouseDown and mouseStillDown messages, the mouse function, and some other mouse-related features. Additionally, the "grab" command is blocking and won't work correctly with interset. Therefore, you need to forget your old script and use the mouseDown-mouseMove-mouseUp approach.

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 5:22 pm

Can you please write me a new code??

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 5:28 pm

Hi,

I'll give you an example. Use it to modify your code.

Code: Select all

local lMouseIsDown
on mouseDown
  put true into lMouseIsDown
end mouseDown

 on mouseMove
  if lMouseIsDown is true then
    put the mouseLoc into myLoc // you'll get weird things if you don't use a variable here
    set the loc of me to myLoc
    if intersect(the long id of me,the long id of "Some Other Control","pixels") then
      beep // or do whatever you want
    end if
  end if
end mouseMove

on mouseUp
  put fals einto lMouseIsDown
end mouseUp
This will work on iOS and Android.

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 5:43 pm

First of all, thank you very very much!
Second thing, it improved my game but not completely.
It still detect wrong collisions.
Here's the new code:

Code: Select all

local LocVar
global _life
local lMouseClicked

## Store the ID of the last SEND in a variable, so you can CANCEL it on "mouseup"!
## No need to check when the mouseis '"UP", right?
local tMessageID

global _startTheGame
global _score
global blackVar
local myLoc


on mouseDown
   put true into lMouseClicked
     if _startTheGame =false then
          exit mousedown
  end if

  ## Since this is ONE part of your complete "Collision detection" routine it should be called immaediately!
  ## No need to send it here.
end mouseDown


on mouseMove
   if lMouseClicked is true then
      put the mouseLoc into myLoc
      set the loc of me to myLoc
      theButtonVar
      end if
end mouseMove

on mouseUp
   put false into lMouseClicked
     set the loc of me to myLoc

  ## Now cancel the last SEND!
  cancel tMessageID
end mouseUp

on theButtonVar
  if intersect (btn "theButton" of card "gameCardNew", button "blueBubble" of card "gameCardNew", "opaque pixels") then

      ## A visual effect will also slow down things!
      ## NOTHING will happen during the effect!
      ## So maybe you wnat ot comment this out?
   popSound
    hide button "blueBubble" ## with visual effect dissolve fast
    set the loc of btn "blueBubble" to -100,-100
    add 10 to _score
    put _score into fld "score" of this card
    hide btn "blueBubble"
  end if

  ## See above...
  theButtonVar2
end theButtonVar

on theButtonVar2
  if intersect (btn "theButton" of card "gameCardNew", button "redBubble" of card "gameCardNew", "opaque pixels") then
       popSound
   add -1 to _life
       put _life into fld "life"
    hide button "redBubble"
    set the loc of btn "redBubble" to 100,-100
    SavedRedBubbleActions
  end if

  ## See above...
theButtonVar3
end theButtonVar2

on theButtonVar3
  if intersect (btn "theButton" of card "gameCardNew", button "goldBubble" of card "gameCardNew", "opaque pixels") then
   popSound    
   add 100 to _score
    put _score into fld "score"
    hide btn "goldBubble" of card "gameCardNew"
    set the loc of btn "goldBubble" to 100,-100
  end if
  theButtonVar4
end theButtonVar3

on theButtonVar4
  if intersect (btn "theButton" of card "gameCardNew", button "blackBubble" of card "gameCardNew", "opaque pixels") then
   popSound   
    add -50 to _score
    hide btn "blackBubble"
    set the loc of btn "blackBubble" to 100,-100
    put _score into fld "score"
  end if
  theButtonVar5
end theButtonVar4

on theButtonVar5
   if intersect (btn "theButton" of card "gameCardNew", btn "redBubble2" of card "gameCardNew", "opaque pixels") then
   popSound    
   add -1 to _life
    put _life into fld "life" of card "gameCardNew"
    hide btn "redBubble2" of card "gameCardNew"
    set the loc of btn "redBubble2" to 100,-100
end if
theButtonVar6
end theButtonVar5

on theButtonVar6
  if intersect (btn "theButton" of card "gameCardNew", btn "heartBubble" of card "gameCardNew", "opaque pixels") then
   popSound    
   add 1 to _life
    put _life into fld "life" of card "gameCardNew"
    hide btn "heartBubble" of card "gameCardNew"
    set the loc of btn "heartBubble" to 100,-100
  end if
  
  ## NOW send your routines in a short interval:
  ## hte message you want ot send in QUOTES!
  send "theButtonVar" to me in 100 millisecs

## STORE messages ID:
  put the result into  tMessageID 
end theButtonVar6 


Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: Code Bugs

Post by Mark » Tue Dec 31, 2013 5:55 pm

Hi

Why exactly is the collision wrong? I am working on a similar project and it detects the collisions correctly.

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

itay1023
Posts: 68
Joined: Fri Sep 28, 2012 1:44 pm

Re: Code Bugs

Post by itay1023 » Tue Dec 31, 2013 8:31 pm

The button doesn't return to it's first location (myLoc variable).

Post Reply