Just nu i M3-nätverket
Gå till innehåll

Kontrollera positioner


Jompan

Rekommendera Poster

Uppgiften är att skapa metoden "shape.overlapPoint(posX, posY)" som ska kolla om positionen x resp y håller sig inom gällande yta. Svar med true eller false.
(Givna testvärden.)
 
Så här långt har jag kommit, vilket dock blir fel.
var shape = {
    x : "",
    y : "",
}; 

shape.init = function(x, y) {
this.x = x;
this.y = y;
}

shape.init = function(posX, posY) {
this.posX = posX;
this.posY = posY;
}

shape1= Object.create(shape);
shape1.init(103,75); 

var shape2= Object.create(shape);
shape2.init(50,64); 

shape1.overlapPoint = function(){
if (this.x < this.posX) {
return true;
}
else {
return false;
}
};

shape2.overlapPoint = function(){
if (this.y < this.posY) {
return true;
}
else {
return false;
}
}; 

Document.write = shape1 + ", " + shape2; 

Finns det någon som kan ge mig en hint?

 

Länk till kommentar
Dela på andra webbplatser

Behöver man inte ha bredd och höjd på elementen istället för bara position?!

Länk till kommentar
Dela på andra webbplatser

ChromaWoods

Du blandar ihop x och y med posX och posY på ett märkligt sätt. Rent spontant:

 

För det första så definerar du shape.init två gånger, så den andra shape.init skriver över den första.

 

För det andra så jämför du bara posX i overlapPoint, du kollar inte posY över huvud taget.

 

För det tredje tror jag inte att du borde skapa overlapPoint två gånger för resp objekt (shape1 och shape2). Du borde istället sätta den metoden på konstruktor-objektet (shape).

 

För det fjärde så hanteras bara x och y.. det är ju bara en koordinat, en punkt? Hur kan det egentligen vara en "shape"? Vad är det konceptuella kriteriet för att ett objekt överlappar ett annat?

 

För det femte ser det lite fult ut att defaultvärdena i "shape" är tomma strängar, eftersom x, y, posX och posY är heltal (integers). Jag hade satt dem till null.

 

För det sjätte så kommer du inte att se något resultat så länge du inte faktiskt kallar på overlapPoint. Än så länge definerar du bara den metoden, men du kallar inte på den någonstans.

Länk till kommentar
Dela på andra webbplatser

Så rätt, så rätt. Jag får bli bättre på att tänka litet grundligare på vad jag egentligen ska göra. Men rent spontant så tycker jag att objekt-hantering är svårt.

Tack för tips och synpunkter.

Länk till kommentar
Dela på andra webbplatser

ChromaWoods

Här är ett föslag från min sida. Notera att jag har samlat metoderna isOverlap och setPosition direkt under objektdefinitionen, men man kan även göra som du och definera metoderna i efterhand.

 

Denna lösning baseras på att en shape är en koordinat och både x- och y-attributet måste vara mindre än det andra objektets dito. Man kan tänka sig att utgångspunkten är 0 och 0 så att t.ex 100 och 100 bildar en kvadrat som är 100x100 pixlar stor. Typ. Och isåfall befinner sig ju en kvadrat som är 50x50 inuti den. Fast egentligen borde man ha bredd och höjd med i exemplet..

var shape = {
  xPos: null,
  yPos: null,
  
  isOverlap: function(otherShape) {
    if (otherShape.xPos < this.xPos && otherShape.yPos < this.yPos) { 
      return true; 
    }
    else { return false; }
  },
  
  setPosition: function(x, y) {
    this.xPos = x;
    this.yPos = y;
  }
  
};

var shape1 = Object.create(shape);
var shape2 = Object.create(shape);

shape1.setPosition(100, 100);
shape2.setPosition(50, 50);

console.log(shape1.isOverlap(shape2));
console.log(shape2.isOverlap(shape1));

Länk till kommentar
Dela på andra webbplatser

Tack för synpunkter och förslag till lösning.

eforum är verkligen ett ypperligt forum att ta till när alt strular!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...