Lesson 2 핸들러와 이벤트

Download Report

Transcript Lesson 2 핸들러와 이벤트

Lesson 2
핸들러와 이벤트
• 이벤트 : 동영상 재생중 발생하는 사건
• 이벤트 발생 -> 처리를 위해 메시지를
핸들러에게 보냄
• 핸들러
– 이벤트에 대하여 특정한 메시지들을 처리
하도록 만들어진 링고 명령어의 그룹
– 이벤트 발생-> 해당 핸들러 호출
핸들러 사용 예
• Lesson17의 start.dir 열기
• 캐스트 멤버 1의 스크립트 보기
on setStatus newStatus
member (“status”).text = newStatus
End
– setStatus : 사용자 정의 핸들러 이름
– newStatus : setStatus 핸들러의 파라미터, 일종
의 매개변수
– Member : 캐스트 멤버를 나타냄
– Status : 캐스트 멤버 이름
– Text : 멤버의 속성으로 text에 입력된 값이 화면에
표시
• 속성관리자->텍스트속성->미디어속성->텍스트
객체 속성및 함수 사용
• Sprite(스프라이트번호).속성
– Sprite(1).loc :스프라이트 1의 위치 속성
• Member(이름 혹은 번호).속성
– Member(“button”).number : button멤버의 번호
– 인용부호 : 문자열일 경우
• Sprite(스프라이트번호).함수
– Sprite(2).pointInHyperlink() : 2번 스프라이트의
하이퍼링크내에 포인터가 있는지 알려줌
핸들러 사용 예
On prepareMovie
setStatus(“PrepareMovie”)
End
– prepareMovie : 캐스트 멤버들이 로드 된 다음, 첫번째
프레임이 그려지기 전에 호출
– setStatus : setStatus 핸들러 호출
– (“PrepareMovie”) : setStatus의 파라미터로 넘겨
지는 값
– “PrepareMovie”라는 텍스트는 setStatus의
newStatus라는 파라미터에 넘겨짐
다양한 핸들러
•
•
•
•
•
•
•
•
•
prepareMovie
startMovie, stopMovie
prepareFrame
enterFrame, exitFrame
mouseDown, mouseUp
mouseEnter, mouserWithin, mouseLeave
keyDown, keyUp
beginSprite, Endsprite
idle
파라미터와 반환값
• 스크립트 편집기에 입력
On encrypt whichString
Return(whichString) -- 값 반환
End
• 메시지 윈도우
Put encrypt(“Secret phrase”)
반복문을 이용한 반환값
On encrypt whichString
encryptedString = EMPTY
Repeat with x =1 to length(whichString)
thisLetter = char x of whichString
thisValue = charToNum(thisLetter)
thisValue = thisValue +1
newLetter = numToChar(thisValue)
encryptedString = encryptedString & newLetter
End repeat
Return(encryptedString)
end
반복문
• 반복문 repeat while
– 조건을 만족하는 동안 명령어 반복
• 사용 방법
repeat while 조건
명령문 1
명령문 2
end repeat
반복문
• 반복문 repeat with
– 반복 회수를 지정, 다른 언어의 for문에 해
당
• 사용 방법
repeat with 변수 = 시작값 to 끝값
명령문 1
명령문 2
end repeat
반복문
• repeat with 변수 in 리스트
– 리스트를 repeat 구문과 함께 사용, 임의의 숫자를
리스트 안에 사용할수 있으므로 연속적인 숫자를
사용할 수 없을때 편리
• 사용방법
– Repeat with 변수 in 리스트
– 명령문
– End repeat
• 사용 예
global gStatus
Repeat with i in [1, 3, 5, 7, 9]
gStatus = gStatus +i
End repeat
Lesson 3
링고로 내비게이션하기
• 링고에서 영어와 유사한 명령어를 허용
• 현재 프레임에서 멈추기에 대한 명령어
로 다음은 모두 같다
go
go
go
go
to frame (the frame)
to frame the frame
to the frame – 가장 일반적임
the frame
마커를 이용한 내비게이션
• 메뉴 항목에 대하여 캐스트 멤버에 스크
립트를 추가
• 다른 무비로 분기하기
– BtnOrd 버튼을 클릭하면, Order.dir로 분기
– BtnOrd 캐스트멤버에 스크립트 추가
• go to movie 명령 사용
– 현재 무비를 닫고 다른 무비의 첫번째 프레임으로 분
기
• go to movie “Ordir.dir”
Lesson 5
디지털 비디오 동기화하기
• 디지털 비디오의 재생 시간 확장
– 링고를 이용하여 디지털 비디오 스프라이
트를 재생 헤드가 반복하도록 한다.
• go to the frame
QuickTime무비에서 신호점사용하기
• 신호점을 사용하여 비디오 재생과 다른
요소를 동기화
• 템포채널을 사용한 동기화
– 큐포인트에서 기다리기
– 채널 : StarTrek
– 큐포인트 : StoreOn
• StoreOn 큐포인트에 도달할때까지 재생헤드를
진행시키지 않고, StarTrek 무비를 재생
링고를 이용한 동기화
• 스프라이트의 아래 속성을 이용한다.
sprite(채널번호).mostRecentCuePoint
– mostRecentCuePoint : 가장 최근에 만난
신호점의 번호를 속성값으로 가짐
– Ex) 퀵타임 무비에서 StoreOn과 StoreOff
2개의 신호점이 있을때, StoreOn을 지나기
전에는 0, StoreOn을 지나면 1, StroeOff를
지나면 2가 된다.
링고로 동기화하기 예
if sprite(gQTChannel).mostRecentCuePoint = 0 then
--If the first cue point in the movie
--in channel gQTChannel hasn't
--passed, then
go to the frame --loop in the current frame.
end if --When the first cue point passes,
--the playback head will continue.
변수의 사용
•
•
•
•
변수이름은 문자로 시작
영숫자 문자만 허용, 밑줄문자 허용
서로붙은 하나의 단어로 구성
링고요소의 명칭과 동일하지 않아야 함
주석과 전역변수 사용
• 변수
– 지역변수
• 지역변수가 선언된 핸들러 내에서만 사용가능
– 전역변수
• 무비에서 전체에서 사용가능
• 전역변수명은 g로 시작하는 것이 좋다
• 변수명칭 앞에 global을 입력
변수 사용 예
global gQTChannel
on startMovie
gQTChannel = 2
end
on exitFrame me
if sprite(gQTChannel).mostRecentCuePoint
= 0 then
go to the frame
end if end
디지털비디오에서 타이밍정보얻기
• 스프라이트 속성중 타이밍 정보를 얻기위한 속성 :
movieTime
• 나레이션이 나오는 순간에 movieTime을 알기 위해서,
메시지 박스에 put sprite(gQTChannel).movieTime
결과를 본다.
• 이 예제에서 대략 1180의 무비시간에 나레이션이 시
작된다.나레이션 시작시에 텍스트 애니메이션을 시작
해야 하므로, 아래와 같이 스크립트를 작성한다.
on exitFrame me
if sprite(gQTChannel).movieTime < 1180
then go to the frame
End if
end
Lesson 6
링고로 스프라이트 조절하기
• Rollover 함수를 사용하여 버튼 상태 조절
– Rollover(whichChannel)
• 포인터가 whichChannel 위에 있으면 TRUE, 없으면
FALSE
• 스프라이트 속성 중 memberNum
– 스프라이트의 캐스트 멤버 번호를 가짐
Ex) sprite(2).memberNum = 29
updateStage -- 무대를 갱신
• 2번 스프라이트를 캐스트 멤버 번호는 29로 설정
마우스를 누르는 동안 다른 멤버로 변경
on mouseDown
repeat while the mouseDown
if rollOver(2) = TRUE then
sprite(2).memberNum = 29
else
sprite(2).memberNum = 28
end if
updateStage
end repeat
sprite(2).memberNum = 28
updateStage
end
LocH와 LocV를 사용한 로봇팔 이동
• 버튼을 클릭할때 그에 따른 로봇팔 위치 이동
– Sprite(whichChannel).locH : 수평위치
– Sprite(whichChannel).locV : 수직위치
(0,0)
사용자 정의 핸들러 작성
• 사용자 정의 핸들러 작성
On 핸들러이름
명령어
End
• 핸들러 이름 규칙
–
–
–
–
하나의 단어(공백포함안됨)
문자로 시작
문자 숫자만을 포함
링고요소와 동일하지 않아야 함
마우스 누르는 동안 로봇팔 움직이는
핸들러 작성
• stillDown 함수 사용
– 마우스 버튼을 누르고 있으면 True, 누르지 않으면 False
on MoveArmUp
repeat while the stillDown
if sprite(1).locV > 3 then
sprite(1).locV = sprite(1).locV -3 updateStage
end if
end repeat
end
로봇팔 좌우로 움직이기
on ExtendArm
repeat while the stillDown
if sprite(1).memberNum > 1 then
sprite(1).memberNum =sprite(1).memberNum
-1
end if
updateStage
end repeat
end
Lesson 7
스크립트 최적화하기
• 지역 변수 사용하기
– 지역변수를 사용하여 Sprite(1).memberNum의 사용을 단순
화 시켰다.
on ExtendArm
repeat while the stillDown
currCast = sprite(1).memberNum
if currCast > 1 then
currCast = currCast -1
end if
updateStage
end repeat
end
Case문 사용
• Case 문을 사용하여 if then else문을 간결하
게 작성할수 있다.
• case 문 사용법
on mouseDown
case ( 선택값 ) of
1: 명령문 1
2: 명령문 2
3 : 명령문 3
end case
end
매개 변수, 전역변수 사용
• 매개 변수 사용
– Case 문을 이용하여 moveArm 핸들러에서
4가지 경우를 처리하려면, moveArm 호출
시, 매개 변수를 넘겨야 함
• 전역변수 사용
– 전역변수를 선언하여 로봇 팔의 속도를 조
절할수 있다.
– 전역변수를 선언하는 곳
• startMovie 핸들러에서 전역변수 초기화
Case문에서 기호사용
• Case문의 각 경우에 해당하는 숫자값은
어떤 경우인지를 나타내기 힘들므로 기
호 사용
– 기호이름앞에 파운드 부호(#)를 붙임
– Ex) #Up, #Down, #Extend, #Retract
최적화된 소스
global gArmSpeed
on startMovie
set gArmSpeed = 1
preLoadMember 1, 27
end
on MoveArm direction
repeat while the stillDown
case (direction) of
#Up
currVert = sprite (1).locV –gArmSpeed
if currVert > 0 then
sprite (1).locV = currVert
end if
링고를 이용한 사운드 재생
• Sound 명령 사용
– Sound 명령은 play()와 stop 메서드를 제
공
– Sound(채널 번호).play(member(멤버))
– Ex) sound(1).play(member(“armSound”))
• soundBusy 함수
– 사운드가 재생중인지를 테스트
– 사운드가 재생중이면 True, 아니면 False
Lesson 7
키보드 조절하기
• Keyinput.dir을 열어 디렉터에서 키코드
가 아스키 코드와 어떻게 다른지 보시오.
• 키코드를 이용하여 액션 제어하기
• 왼쪽 화살표인 경우 도트를 1픽셀 외쪽
으로 이동
on keyDown
If the keycode = 123
= sprite (2).locH -1
sprite(2).locH
Keypressed
• 키가 눌려져 있는지 여부를 추적
• 사용법
– Keypressed(keycode)
– Keypressed(“character”)