php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.01.2012, 13:58  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Dein JSFiddle funktioniert nicht
"Funktioniert nicht" ist keine vernünftige Fehlerbeschreibung:P
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.01.2012, 14:16  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Sorry, mein Fehler, RequestPolicy hat zugeschlagen.

Ich sag mal so:

Code:
    Crafty.sprite(256,288,"http://files.cruel-online.de/img/objects/smithy01.png",{building:[0,0]});
    var building = Crafty.e("2D, DOM, building").attr({x:0,y:0});
    var clone = building.clone();

In clone():

            clone = Crafty.e();
Ich würde vermuten, dass das Problem daher rührt, dass einiges über Crafty.sprite() gesetzt wird, während Dein clone nur .e() aufruft. Was da im Hintergrund passiert, kann ich Dir nicht sagen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 19.01.2012, 17:39  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Schau ma hier:
http://stackoverflow.com/questions/7...#answer-728694
Schnapp dir seine clone-Methode, erweiter sie um den DomNode check und fertig
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 19.01.2012, 17:54  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Das Problem ist vermutlich einfach, dass die Properties im Prototypen verankert sind. Offenbar hat for in damit ein Problem. Viel wichtiger scheint mir aber die Frage, ob es so sinnvoll ist, das Objekt einfach zu clonen oder nicht besser, ein neues mit gleichen Eigenschaften zu erstellen. Du weißt doch gar nicht, was beim erzeugen alles vor sich geht. Das kann lustige Seiteneffekte produzieren.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 20.01.2012, 08:58  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Viel wichtiger scheint mir aber die Frage, ob es so sinnvoll ist, das Objekt einfach zu clonen
Genau die gleiche Frage habe ich mir auch gestellt. Ich werde wohl den einfachen weg gehen und einfach neue objekte erzeugen, denn das hat funktioniert. somit ist dann das THema erledigt
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 20.01.2012, 09:50  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Hab grad nen console.dir von dem Crafty-Object gemacht..
PHP-Code:
        /**@
    * #.clone
    * @comp Crafty Core
    * @sign public Entity .clone(void)
    * @returns Cloned entity of the current entity
    * Method will create another entity with the exact same
    * properties, components and methods as the current entity.
    */
        
clone: function () {
            var 
comps this.__c,
            
comp,
            
prop,
            clone = 
Crafty.e();

            for (
comp in comps) {
                clone.
addComponent(comp);
            }
            for (
prop in this) {
                clone[
prop] = this[prop];
            }

            return clone;
        }, 
edit: ich seh gerade, dass du dich daran orientiert hast. Die Methode ging nicht? Wieso erwähnst du denn nicht, dass es da ein Original zu gibt, an dem du dich versuchst? Wär schon bissi hilfreich, so fürs nächste mal, spatz!
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog

Geändert von rudygotya (20.01.2012 um 09:54 Uhr).
rudygotya ist offline   Mit Zitat antworten
Alt 20.01.2012, 11:45  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

ja die vorhandene clone funktion macht überhaupt nicht das , was von ihr erwartet wird, also habe ich versucht diese clone funktion zu überschreiben bzw zu ändern.

Crafty basiert auf einem Entity Component Modell . Man hat Entities mit grundfunktionen und eigenschaften, und Componente, die Componente werden von einem selbst erstellt und mit funktionen und weiteren eigenschaften erweitert.

Man erzeugt mit Crafty eine Entitie und füllt diese mit Componenten. funktioniert auch alles ohne Probleme. nun wollte ich meine Entitie, welche schon mit Componenten befüllt ist, zu clonen.

Wozu soll das Ganze dienen?

Angenommen wir haben eine 2D Isometrische Karte. Diese hat Objekte(Häuser, Bäume usw..) wenn das Objekt größer ist als eine Kachel auf der Karte, wollte ich das Objekt splicen(teilen).

Crafty bietet eine methode crop() , damit kann man ein bestimmten bereich einer Spritemap anzeigen.

also habe ich mir gedacht: ich schaue nach ob meine Entitie größer ist als die kachel, clone ich diese Entitie und verwende crop methode . so dass ich zb aus einem Haus, 4 häuser teile mache. Somit kann ich jedem stück des hauses einen anderen z-index verpassen.

der z-index soll der y koordinate der karte entsprechen.

Wenn ich meine figur bewege, soll diese auch ihren z-index anhand der y position erhalten. somit hätte ich die möglichkeit objekte mit der figur zu überlappen. automatisch.

das war der gedanke. jedoch funktioniert das clonen nicht wie es soll, da die eigenschaft __image(background image eines divs) nicht geclont wird.
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 21.01.2012, 04:47  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Da es eh schon eine clone Funktion gibt, kannst du die auch von außen erweitern, wenn du in der Funktion nichts patchen willst.
PHP-Code:
(function () {
    var 
originalClone Crafty.prototype.clone;
    
Crafty.prototype.clone = function(){
        var clone = 
originalClone.applythis, Array.prototype.slice.callarguments ) );
        if( 
this.__image && !! clone ) {
            clone.
__image this.__image;
        }
        return clone;
    };
})(); 
=> http://jsfiddle.net/SCLDr/6/

Allerdings ist von building nix zu sehen. Kenn crafty nicht, aber sollten da jetzt nicht 2 Objekte zu sehen sein?


Aus deren clone fn:

PHP-Code:
            for (prop in this) {
                clone[
prop] = this[prop];
            } 
=> sog. shallow copies => einfache typen werden kopiert, objekte und arrays jedoch nur referenziert. Ungetestetes Probiererle:

PHP-Code:
for (prop in this) {
    if( 
this[prop].nodeType != null ) {
        try {
            clone[
prop] = this[prop].cloneNode();
        } catch(
e) {
            clone[
prop] = this[prop];
        }
    } else if( 
this.hasOwnProperty(prop) ) {
                clone[
prop] = this[prop];
        }
    }

Für die Akten noch hier jQuerys extend Methode ohne jQuery:

PHP-Code:
/**
*
* @function
* @private
* @param mixed obj
* @returns bool
*/
var _isArray = Array.isArray || function( obj ) {
    return 
Object.prototype.toString.callobj ) === '[object Array]';
},

/**
*
* @function
* @private
* @param {Object} obj
* @returns bool
*/
_isPlainObject = function( obj ) {
    if ( !
obj || typeof obj !== "object" || obj.nodeType || "setTimeout" in obj ) {
        return 
false;
    }

    if ( 
obj.constructor &&
        ! 
hasOwn.callobj"constructor" ) &&
        ! 
hasOwn.callobj.constructor.prototype"isPrototypeOf" )
    ) {
        return 
false;
    }

    
// Own properties are enumerated firstly, so to speed up,
    // if last one is own, then all properties are own.

    
var key;
    for ( 
key in obj ) {}

    return 
key === undefined || hasOwn.callobjkey );
},
/**
* @private
* @param mixed data : array or object
* @param {Function} fn
* @param {Object} scope
*/
_each = function( datafnscope ) {

    if( 
data.prototype && data.prototype.forEach ) {
        
data.forEach( fnscope );
    } else {
        for( var 
i in data ) {
            
fn.callscopedata], );
        }
    }
},
/**
*
* @function
* @private
* @see jQuerys' extend
*/
_extend = function() {
    var 
options,
        
target arguments[0] || {},
        
1,
        
length arguments.length,
        
deep false;

    
// Handle a deep copy situation
    
if( typeof target === "boolean" ) {
        
deep target;
        
target arguments] || {};
        
// skip the boolean and the target
        
2;
    }

    
// Handle case when target is a string or something (possible in deep copy)
    
if( typeof target !== "object" && typeof target !== "function" ) {
        
target = {};
    }

    for( ; 
lengthi++ ) {

        if( (
options arguments]) != null ) {
            
// Extend the base object - in difference to jQuery use native forEach if possible
            
_eachoptions, function ( copyname ) {
                var 
src targetname ],
                    
copyIsArray,
                    clone;

                
// Prevent never-ending loop
                
if ( target === copy ) {
                    return;
                }

                
// Recurse if we're merging plain objects or arrays
                
if( deep && copy && ( _isPlainObjectcopy )
                    || ( 
copyIsArray _isArraycopy ) ) )
                ) {
                    if( 
copyIsArray ) {
                        
copyIsArray false;
                        clone = 
src && _isArray(src) ? src : [];

                    } else {
                        clone = 
src && _isPlainObject(src) ? src : {};
                    }

                    
// Never move original objects, clone them
                    
targetname ] = _extenddeep, clone, copy );

                
// Don't bring in undefined values
                
} else if ( copy !== undefined ) {
                    
targetname ] = copy;
                }

            }, 
this );
        }
    }

    
// Return the modified object
    
return target;
}; 
edit: falls das _extend nicht läuft, evtl. fehlende dependencies kannst du dir hier rausfischen: https://github.com/basti1253/my/blob...src/my.core.js

Grüße
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog

Geändert von rudygotya (21.01.2012 um 04:54 Uhr).
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Überschrift Clonen und nach oben zählen rejoice JavaScript, Ajax und mehr 1 03.02.2011 14:49
Nodes clonen - Internet-Explorer R4v3r HTML, Usability und Barrierefreiheit 0 24.07.2007 17:09
Datenfeld clonen? tinchen Datenbanken 4 25.05.2006 17:13
persistente MySQL Verbindung und clonen HStev PHP-Fortgeschrittene 16 22.11.2005 13:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum