- 물리엔진 예제 (?) - http://www.spritehand.com/
여러가지 게임소스들에서 실버라이트 상에서 사용하는 물리처리를 볼수 있음 - http://www.andybeaulieu.com/silverlight/2.0/polygondemo/testpage.html
- 알파벳이나 도형을 그려서 움직이면 부딛히거나 하는 모습에서 물리계산이
되는 것을 알수 있음 - http://www.spritehand.com/silverlight/2.0/sortthefoobars/testpage.html
- 좌우키를 이용해서 특정색의 캐릭터를 좌우측으로 보내는 게임 - Shine Draw – Flash vs Silverlight
오늘의 내용 : 플래쉬의 Timer , Enter Frame 과 실버라이트의 Dispatcher Timer 와 Composition Target 비교
결론 : 실버라이트쪽이 좀더 정교함
http://www.shinedraw.com/mathematics/difference-on-timer-enter-frame-dispatcher-timer-and-composition-target/ - SoThink Quicker for silverlight
플래쉬나 기타 여러 이미지 , 동영상 소스를 플래쉬처럼 타임라인상에서 에니메이션
을 만들어 silverlight Animation으로 저장하게 해주는 프로그램 Free Trial과 상용으
로 나뉘어 있음 만드는 방식은 정말 플래쉬와 거의 동일
- 홈페이지 : http://www.sothink.com/product/animation-maker-for-silverlight/index.htm
- 샘플 : http://www.sothink.com/product/animation-maker-for-silverlight/samples/index.htm
- 투토리얼 비디오 : http://www.sothink.com/blog/tutorial-how-to-make-a-silverlight-animation-step-by-step/ - Silverlight Ribbon
실버라이트로 구현한 리본… 진짜 워드는 아니고 리본부분만 UI로써 구현된 데모임
- 홈페이지 : http://www.codeplex.com/silverlightribbon/SourceControl/ListDownloadableCommits.aspx
- 데모 : http://msbluelight-0.agappdom.net/e1/d/60108/12953379/63367524000/0.yEav2NOlj2Jl8E0bnk4hVpovAsg/zziframehtml2zz.html#%2f%2fappId%2fSilverlightRibbon.xap%2f%2ftrue%2f%2f%2f%2f%2ftrue%2f2.0%2f0 - http://www.cynergysystems.com/ – Cynergy System
FLEX와 Silverlight 를 동시에 수행하는 회사 아직은 플렉스에 편향된 프로젝트가
쇼케이스 이지만 블로그를 보고 있으면 실버라이트에 할애하는 것도 상당히 많음 - http://adamkinney.com/
실버라이트와 WPF쪽 에반젤리스트의 블로그 - 실버라이트와 HTML간 Interaction
페이지 : http://www.silverlightshow.net/items/Interaction-between-Silverlight-and-HTM.aspx
내용요약 : .NET에서는 HTML을 DOM 형식으로 인식하고 있다. silverlight도 마찬가지로 DOM형식으로 접근 가능한 라이브러리를 제공하고 있어서 자신을 로드하고 있는 HTML의 태그나 JS를 호출하거나 직접실행할수 있다. 역으로 HTML에서 실버라
이트에 메서드를 호출할수도 있다 이에 대한 내용을 다룬다. - http://www.visualwebgui.com - Desktop형태의 UI 컴포넌트 개발회사
실버라이트 와 DHTML 컨트롤과 프레임워크에 대해서 오픈소스 와 엔터프라이즈를
회사홈페이지에서 모두 계시하고 있음
'분류 전체보기'에 해당되는 글 53건
- 2009.01.14 오늘의 실버라이트
- 2009.01.13 [링크] Windows Live Writer로 글쓰기
- 2008.11.27 [링크] Populate new tree from current tree
- 2008.11.25 [링크] Custom filterable header column for DataGrid
- 2008.11.25 [링크] Understanding Flex itemRenderers
- 2008.10.29 [링크] Merapi - Java와 AIR의 세상에 다리가 되어...
- 2008.10.27 Flex 3 컴파일러 손보기
- 2008.10.22 [잡담] 드디어 다시 구하다..
- 2008.10.21 [링크] Bridging the gap between Flex and Struts using FxStruts
- 2008.10.08 [펌] Flex CookBook - Paged ArrayCollection
무조건 링크 입니다. ㅡ.ㅡ;;
ADN Flex cookbook beta의 내용이고요.. Header rendering 도 꽤 많이 사용됩니다. 스킨의 의미가 아니더라도요..
--> 여기 <-- 클릭 인거 아시죠?
머.. 거창하게 써버렸네요...
걍 링크입니다.
제목그대로 입니다.
---> 여기 <---
(오늘은 대빵큰 글씨입니다. 링크라서.. ㅡ.ㅡ;;)
LiveCycle DataService ES 가 Flex와 자바등을 연결하는 매개체를 포함하고 있는 것이라면
Merapi는 매개체 자체입니다.
한번 둘러보심이.. 백마디 말보다 좋을거 같습니다.
플렉스를 컴파일하다보면 짧게는 몇십초 길게는 몇분 이상씩 기다려야합니다. 그것도 하나의 Application일때라면야 그나마 운영서버에 올리기 위한거면 그나마 나은상황입니다. 하지만 Application이 여러개인데다가 모듈까지 생성하고 있다면? 그것도 현재 개발중이면? 눈앞이 깜깜합니다.
Gumbo는 그래도 어느정도 성능향상을 보인거 같습니다. 컴파일러 자체 성능도 나머지 컴포넌트들도... 하지만 그 향상에 쓰인 내용이 현재에도 계속 버전업중인 FLEX3에 적용되는건 거의 없습니다. 그러다보니 최근글들에서는 Gumbo로 바로 이전하는걸 조심스레 추천한 글도 있습니다. 그리고 아예 스스로 커스터마이징한 컴파일러도 나오기 시작했구요.. 오늘의 글은 그중에서 아예 FLEX3 컴파일러에 Gumbo 컴파일러를 병합시킬수 있게 준비한 사람에 대한 블로그 글을 소개합니다.
--> 여기 <-- 를 클릭하시면 이동합니다.
노파심에서 말씀드리지만 이건 무조건 하시라고 소개하는게 아닙니다. 말그대로 이렇게 접은한 방법이 있다는 것이니 충분히 검토해 보시고 적용해 보시기 바랍니다.
함.. 참고만 하세요.. ㅋㅋ Struts만 단독으로 쓰이는 경우보다는 Spring + Struts라든지.. 그런거라서... 크흐..
--> 여기 <--
우리 회사에서는 아예 페이징에 대한 컴포넌트를 만들어서 값을 던질수 있게 했는데 이것도 역시 방법이 되겠네요..
ADN FLEX COOKBOOK에 올라온 내용입니다.
COOKBOOK 가보실려면 여기 로 가보세요.
Paged ArrayCollection
Problem Summary
ArrayCollection does not support paging
Solution Summary
Adding properties such as "pageSize", "numberOfPages" and "lengthTotal" to the existing ArrayCollection and implementing a filterfunction supporting paging gives a simple pagination addition to the existing ArrayCollection class.
Explanation
Yesterday one of the developers in my company had the need for a PagedArrayCollection. A quick search on Google revealed only this implementation, which turned out to be buggy so I decided to implement one myself.
I designed an interface called IPagedCollection which in combination with an extension of the existing mx.collections.ArrayCollection implementation would do the job.
Only hurdle was the need to override addItemAt and removeItemAt as the autoUpdate doesn’t seem to work when a filterFunction is employed. I will look in to this phenomena, but as for now a call to refresh after inserting or removing does the job nicely.
The code itself is quite simple, I have also created a small demo-application which illustrates the use of the collection.
**
* Copyright(c) 2008 HelloGroup A/S, some rights reserved.
* Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License
**/
package com.hello.collections
{
public interface IPagedArrayCollection
{
function get currentPage() : Number;
function set currentPage( value:Number ) : void;
function get numberOfPages() : Number;
function get pageSize() : Number;
function set pageSize( value:Number ) : void;
function get lengthTotal() : Number;
}
}
/**
* Copyright(c) 2008 HelloGroup A/S, some rights reserved.
* Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License
*
* Known Issues:
* - When the collection changes in size or pagesize, the currentPage is not updated.
* This is a problem if currentPage is set to a higher value than in the new collection.
**/
package com.hello.collections
{
import mx.collections.ArrayCollection;
import mx.events.CollectionEvent;
public class PagedArrayCollection extends ArrayCollection implements IPagedArrayCollection
{
private var _currentPage:Number = 1;
private var _numberOfPages:Number = 1;
private var _pageSize:Number = 10;
public function PagedArrayCollection( source:Array=null )
{
super( source );
filterFunction = filterData;
addEventListener( CollectionEvent.COLLECTION_CHANGE, onChange );
}
/**
* Adds an item to the collection at the specified index.
*
* @param item Item to be added
* @param index Index of the item to be added
*
* Note: Needs to be overridden in order to trigger refresh.
* AddItem eventually calls this function so its not needed to override addItem
**/
override public function addItemAt( item:Object, index:int ) : void
{
super.addItemAt( item, index );
refresh();
}
/**
* Removes the item from the collection at the specified index
*
* @param index Index of the item to be removed
* @return The item removed
*
* Note: Needs to be overridden in order to trigger refresh
**/
override public function removeItemAt( index:int ) : Object
{
var removedItem:Object = super.removeItemAt( index );
refresh();
return removedItem;
}
protected function onChange( event:CollectionEvent ) : void
{
if( _numberOfPages != numberOfPages )
{
_numberOfPages = numberOfPages;
onPagingChange( PagedCollectionEventKind.NUMBEROFPAGES_CHANGE );
}
}
protected function onPagingChange( kind:String ) : void
{
dispatchEvent( new CollectionEvent( CollectionEvent.COLLECTION_CHANGE, false, false, kind ) );
}
[ChangeEvent("collectionChange")]
public function get currentPage() : Number
{
return _currentPage;
}
public function set currentPage( value:Number ) : void
{
_currentPage = value;
refresh();
onPagingChange( PagedCollectionEventKind.CURRENTPAGE_CHANGE );
}
[ChangeEvent("collectionChange")]
public function get numberOfPages() : Number
{
var result:Number = source.length / pageSize;
result = Math.ceil( result );
return result;
}
[ChangeEvent("collectionChange")]
public function get pageSize() : Number
{
return _pageSize;
}
public function set pageSize( value:Number ) : void
{
_pageSize = value;
refresh();
onPagingChange( PagedCollectionEventKind.PAGESIZE_CHANGE );
}
[ChangeEvent("collectionChange")]
public function get lengthTotal() : Number
{
return source.length;
}
private function filterData( item:Object ) : Boolean
{
var dataWindowCeiling:Number = pageSize * currentPage;
var dataWindowFloor:Number = dataWindowCeiling - pageSize;
var itemIndex:Number = getItemIndex( item );
var result:Boolean = dataWindowFloor <= itemIndex && itemIndex < dataWindowCeiling;
return result;
}
}
}
/**
* Copyright(c) 2008 HelloGroup A/S, some rights reserved.
* Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License
**/
package com.hello.collections
{
public class PagedCollectionEventKind
{
public static const CURRENTPAGE_CHANGE:String = "currentPageChange";
public static const PAGESIZE_CHANGE:String = "pageSizeChange";
public static const NUMBEROFPAGES_CHANGE:String = "numberOfPagesChange";
}
}
This is the small demo-application which illustrates and validates that the collection works.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
initialize="onInitialize(event)"
creationComplete="onCreationComplete(event)">
<mx:HBox width="100%">
<mx:Label text="Key:" />
<mx:TextInput id="keyInput" text="NEW KEY" />
<mx:Label text="Value:" />
<mx:TextInput id="valueInput" text="NEW VALUE" />
<mx:Button id="addButton" label="Add Item" />
<mx:Button id="removeButton" label="Remove Item" enabled="{ grid.selectedItem != null }" />
<mx:Label text="Set PageSize:" />
<mx:ComboBox id="pageSizeSelector" dataProvider="{ [ 5, 10, 25] }" selectedIndex="1" change="{ collection.pageSize = Number( pageSizeSelector.value ) }" />
</mx:HBox>
<mx:DataGrid id="grid" dataProvider="{ collection }" width="100%" height="100%" />
<mx:HBox>
<mx:Label text="Count: { collection.length } ({ collection.lengthTotal })" />
<mx:Label text="( { collection.currentPage }/{ collection.numberOfPages } )" />
<mx:Label text="PageSize: { collection.pageSize }" />
<mx:Button label="Previous" enabled="{ collection.currentPage > 1 }" click="{ collection.currentPage-- }" />
<mx:Button label="Next" enabled="{ collection.numberOfPages > collection.currentPage }" click="{ collection.currentPage++ }" />
</mx:HBox>
<mx:Script>
<![CDATA[
import mx.events.CollectionEvent;
import mx.events.FlexEvent;
import com.hello.collections.PagedArrayCollection;
[Bindable]
private var collection:PagedArrayCollection;
private function onInitialize( event:FlexEvent ) : void
{
var collection:Array = new Array();
for( var i:Number = 1; i <= 20; i++ )
{
collection.push( { key:"Item_Key_"+ i, value:"Item_Value_"+ i } );
}
this.collection = new PagedArrayCollection( collection );
this.collection.addEventListener( CollectionEvent.COLLECTION_CHANGE, onItemsChange );
this.collection.refresh();
}
private function onCreationComplete( event:FlexEvent ) : void
{
addButton.addEventListener( MouseEvent.CLICK, addButton_Click );
removeButton.addEventListener( MouseEvent.CLICK, removeButton_Click );
}
private function addButton_Click( event:MouseEvent ) : void
{
collection.addItem( { key:keyInput.text, value:valueInput.text } );
}
private function removeButton_Click( event:MouseEvent ) : void
{
collection.removeItemAt( collection.getItemIndex( grid.selectedItem ) );
}
private function onItemsChange( event:CollectionEvent ) : void
{
trace( event.kind +" collectionchanged" );
}
]]>
</mx:Script>
</mx:Application>